Unix Man (Справочное руководство)

         

SORT(1)


SORT(1)

НАЗВАНИЕ


sort - сортировка и/или слияние файлов

СИНТАКСИС

sort [-c] [-m] [-u] [-o выходной_файл] [-yкилобайт] [-zдлина] [-d] [-f] [-i] [-M] [-n] [-r] [-b] [-tразделитель] [+позиция_1 [-позиция_2]] [файл ...]

ОПИСАНИЕ


Команда sort сортирует строки, входящие во все исходные файлы, и выдает результат на стандартный вывод. Если имена файлов не указаны, или в качестве файла указан -, исходная информация поступает со стандартного ввода.

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

Следующие опции изменяют стандартный порядок работы:

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

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

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

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

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

-yкилобайт

Количество дополнительной памяти, используемой командой sort, существенно влияет на скорость ее работы. Если опция -y отсутствует, sort начинает работу, используя область памяти некоторого стандартного размера, а в случае необходимости запрашивает дополнительную память. Если опция -y задана с аргументом, команда sort начинает работу, используя указанное число килобайт памяти, если только не нарушены ограничения сверху или снизу; в этом случае используется соответствующее крайнее значение. Таким образом, указание -y0 гарантирует использование минимального об ема памяти. Опция -y без аргумента задает область памяти максимального размера.

-zдлина

Во время сортировки запоминается размер самой длинной строки, так что для фазы слияния команда sort может отвести буфер нужного размера. Если, в силу действия опций -c или -m, фаза сортировки пропускается, используется некоторый стандартный размер. Наличие строк, превышающих по длине буфер, приводит к аварийному завершению команды. Задание заведомо достаточной длины гарантирует нормальное выполнение слияния.


Следующие опции позволяют выбрать нужный способ сравнения:

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

-f Преобразовывать малые буквы в большие.

-i При нечисловых сравнениях игнорировать символы с (восьмеричными) кодами, не лежащими в пределах 040-0176.

-M Сравнивать как месяца. Первые три символа, отличные от пробела, сравниваются таким образом, что "JAN" < "FEB" < ... < "DEC" (малые буквы преобразуются в большие). Остальные трехсимвольные сочетания считаются меньшими, чем "JAN". Эта опция включает опцию -b (см. ниже).

-n Числовое сравнение. Начальные пробелы отбрасываются, затем цифровые цепочки символов, содержащие быть может знак минус и десятичную точку, сравниваются как числа. Эта опция включает опцию -b (см. ниже). Отметим, что опция -b действует только на ключи сортировки с наложенными ограничениями.

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

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

Полем называется минимальная последовательность символов, за которой следует разделитель полей или перевод строки. По умолчанию символом-разделителем считается пробел или символ табуляции. Пробелы и табуляции сразу вслед за разделителем (если они есть) принадлежат следующему полю. Все пробелы в начале строки входят в первое поле. На трактовку разделителей влияют следующие опции:

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

-tразделитель

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





При наложении ограничения на ключ сортировки указывается позиция начала ключа (+позиция_1) и позиция сразу за концом ключа (-позиция_2). Если опция -позиция_2 отсутствует, ключ занимает весь остаток строки.

Позиция_1 и позиция_2 задаются как пара m.n, возможно, с последующими флагами bdfiMnr. Начальная позиция задается как +m.n, что означает (n+1)-ый символ в (m+1)-ом поле (поля и символы нумеруются с единицы). Отсутствие .n означает .0, то есть первый символ (m+1)-го поля. Если указан флаг b, то n отсчитывается от первого непробела в (m+1)-ом поле; +m.0b означает первый непробел в (m+1)-ом поле.

Позиция за концом ключа записывается как -m.n, что означает (n+1)-ый символ (включая разделители) после последнего символа m-го поля. Если .n опущено, то подразумевается .0, то есть разделитель после m-го поля. Если указан флаг b, то n отсчитывается от первого непробела в (m+1)-ом поле.

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

ПРИМЕРЫ



  • Отсортировать файл f1, используя в качестве ключа второе поле:

    sort +1 -2 f1


  • Отсортировать по убыванию содержимое файлов f2 и f3, поместив результат в файл f4. Ключом сортировки служит первый символ второго поля:

    sort -r -o f4 +1.0 -1.2 f2 f3


  • Отсортировать по убыванию содержимое файлов f5 и f6. Ключом сортировки служит первый непробел второго поля:

    sort -r +1.0b -1.1b f5 f6


  • Распечатать файл паролей [см. ], отсортировав его по числовым значениям идентификаторов пользователей (третье поле, поля разделяются символом :):

    sort -t: +2n -3 /etc/passwd


  • Распечатать строки уже отсортированного файла f7, выводя лишь первую из строк с одинаковыми третьими полями:

    sort -um +2 -3 f7


  • ФАЙЛЫ



    /usr/tmp/stm???

    СМ. ТАКЖЕ



    , , .

    ДИАГНОСТИКА



    При возникновении различных ошибок (например, строка слишком длинная) и при обнаружении нарушений порядка при запуске с опцией -c в стандартный протокол выдается соответствующее сообщение и сортировка завершается с ненулевым кодом.

    Если в последней строке файла пропущен символ возврата каретки, то он добавляется автоматически, о чем выдается предупреждение.

    ПРЕДОСТЕРЕЖЕНИЯ



    Не гарантируется сохранение порядка следования строк с равными ключами.

    Не оговаривается приоритет различных способов сравнения (например, числового и словарного), поэтому задавать комбинацию флагов dMn не имеет смысла.

    /spellhist "исторический" файл /usr/lib/spell/spellprog программа

    СМ. ТАКЖЕ



    deroff(1), , , . eqn (1), tbl (1), troff (1) в руководстве DOCUMENTER'S WORKBENCH Software 2.0 Technical Discussion and Reference Manual.

    СЮРПРИЗЫ



    Эталонный список неполон; при новых реализациях, возможно, возникнет желание несколько месяцев обрабатывать выход системы, чтобы собрать отдельные добавления; обычно они помещаются в отдельный файл, который добавляется в хэшированный эталонный список через spellin.


    Содержание раздела