Опубликован: 15.06.2004 | Уровень: специалист | Доступ: платный
Лекция 6:

Средства обработки структурированных данных

Служебная программа sort

sort [-m] [-o выходной_файл] [-bdfinru] 
[-t символ] [-k определение_ключа] ... 
[файл ...]

sort -c [-bdfinru] [-t символ] 
[-k определение_ключа] [файл]

в зависимости от заданных опций выполняет одно из трех возможных действий:

  • сортировку строк всех исходных файлов с записью результата в выходной файл;
  • слияние всех исходных (предварительно отсортированных ) файлов с записью результата в выходной файл;
  • проверку того, что единственный исходный файл действительно отсортирован.

При упорядочении используется один или несколько ключей сортировки, выделяемых из каждой вводимой строки. По умолчанию ключ сортировки один - вся строка, а порядок является лексикографическим.

Следующие опции управляют порядком работы утилиты sort.

-c

Проверить, является ли (единственный) исходный файл уже отсортированным. В выходной файл ничего не записывается, результат работы определяется по коду завершения (0 - успешное завершение, 1 - данные в файле не упорядочены должным образом, больше единицы - зафиксирована ошибка).

-m

Слияние исходных файлов, которые предполагаются отсортированными.

-o выходной_файл

Результат направляется не на стандартный вывод, а в выходной_файл, который может совпадать с одним из исходных.

-u

Опция уникальности: из всех совпадающих строк выводить только одну, при наличии опции -c контролировать отсутствие строк с совпадающими ключами сортировки.

Следующие опции изменяют подразумеваемый способ сравнения. Если они употреблены независимо от определения ключей сортировки, то диктуемые ими правила действуют глобально, на все ключи.

-d

"Словарный" порядок: при сравнении являются значимыми только буквы, цифры и пробельные символы.

-f

При сравнении преобразовывать малые буквы в большие.

-i

При сравнении игнорировать непечатные символы.

-n

Числовое сравнение. Ограничить ключ сортировки начальной числовой цепочкой, которая может содержать пробельные символы, знак минус, цифры, символ основания системы счисления и разделители тысяч.

-r

Заменить результат сравнения на противоположный.

Следующие опции изменяют трактовку разделителей полей.

-b

Игнорировать начальные пробельные символы при определении начала и конца ключей сортировки. Если опция -b указана перед первой опцией -k, она воздействует на все ключи, снабженные опцией -k.

-t символ

Использовать заданный символ как разделитель полей. Разделитель не является частью поля (хотя и может входить в ключ сортировки ). Каждое вхождение разделителя значимо, т. е. два рядом стоящих разделителя ограничивают пустое поле. В отсутствие опции -t подразумеваемыми разделителями становятся пробельные символы, точнее, максимальная непустая последовательность таких символов, а в поле включаются предшествующие ему разделители.

Ключи сортировки определяются с помощью опции -k. Определение ключа имеет следующий формат:

начало_поля[тип][,конец_поля[тип]]

Ключевое поле охватывает все позиции - от начальной до конечной, которые задаются, соответственно, как

номер_поля[.первый_символ]
номер_поля[.последний_символ]

Тип - это один из модификаторов b, d, f, i, n, r. Модификатор b ведет себя аналогично опции -b, но применяется только к той границе ключа, после которой он указан. Остальные модификаторы также аналогичны одноименным опциям, но воздействуют на ключ в целом.

Если указано несколько ключей сортировки (согласно стандарту, реализацией должно поддерживаться по крайней мере девять вхождений опции -k ), то более поздние используются только в случае равенства более ранних. Если значения ключей сортировки двух строк совпадают, строки упорядочиваются с учетом всех символов.

Антон Коновалов
Антон Коновалов

В настоящее время актуальный стандарт - это POSIX 2008 и его дополнение POSIX 1003.13
Планируется ли актуализация материалов данного очень полезного курса?

Ирина Воскресенская
Ирина Воскресенская
Россия, Москва, НИЯУ МИФИ
Максим Баранов
Максим Баранов
Россия