Linux. Команда sort
Команда sort
сортирует содержимое файла в алфавитном или нумерологическом порядке. Если задать несколько файлов, то команда соединит их и, рассортировав, выдаст единым списком.
$ sort [опции] файл(ы)
Рассмотрим несколько примеров.
$ cat linux.txt Ubuntu Redhat Centos Centos Debian Fedora
$ sort linux.txt Centos Centos Debian Fedora Redhat Ubuntu
Опция -u
предписывает команде sort
исключить дубликаты строк.
$ sort -u linux.txt Centos Debian Fedora Redhat Ubuntu
Опция -r
позволяет изменить порядок сортировки на обратный.
$ sort -r linux.txt Ubuntu Redhat Fedora Debian Centos Centos
Опция -o
перенаправляет вывод команды в файл.
$ sort linux.txt -o sorted.txt $ cat sorted.txt Centos Centos Debian Fedora Redhat Ubuntu
Зачастую требуется отсортировать строки в файле, заменив в нем первоначальные данные отсортированными. Но если ввести команду:
$ sort filename > filename
то содержимое файла filename
будет очищено. А с помощью опции -o
вполне допустимо указывать одно и то же имя входного и выходного файла.
Опция -n
используется, когда нужно сортировать числа, а опция -k
позволяет задавать столбец (колонку) сортировки.
$ cat phonebook.txt Alice Chebba 973-555-2015 12 Barbara Swingle 201-555-9257 -5 Liz Stachiw 212-555-2298 21 Susan Goldberg 201-555-7776 17 Susan Topple 212-555-4932 -3 Tony Iannino 973-555-1295 11
Сортировка по второй колонке (фамилия):
$ sort -k2 phonebook.txt Alice Chebba 973-555-2015 12 Susan Goldberg 201-555-7776 17 Tony Iannino 973-555-1295 11 Liz Stachiw 212-555-2298 21 Barbara Swingle 201-555-9257 -5 Susan Topple 212-555-4932 -3
Сортировка по последней колонке, по возрастанию чисел:
$ sort -k4n phonebook.txt Barbara Swingle 201-555-9257 -5 Susan Topple 212-555-4932 -3 Tony Iannino 973-555-1295 11 Alice Chebba 973-555-2015 12 Susan Goldberg 201-555-7776 17 Liz Stachiw 212-555-2298 21
-k
позволяет указать не только колонку, по которой надо сортировать — но и номер символа в этой колонке — например -k2.5
. Это значит — сортировать по второй колонке, но не учитывать символы с первого по четвертый.
По умолчанию команда sort
считает, что колонки разделяются символами пробела или табуляции. Опция -t
позволяет задать другой разделитель.
$ sort /etc/passwd -k3 -t:
Опция -b
игнорирует пробелы в начале строк.
Опция -f
отменяет чувствительность к регистру.
Опция -d
признает только буквы, цифры и пробелы и сортирует как в словаре.
$ sort --help Использование: sort [ПАРАМЕТР]… [ФАЙЛ]… или: sort [ПАРАМЕТР]… --files0-from=Ф Печатает сортированное слияние всех ФАЙЛ(ов) на стандартный вывод. Если ФАЙЛ не задан или задан как -, читает стандартный ввод. Аргументы, обязательные для длинных параметров, обязательны и для коротких. Параметры, задающие порядок: -b, --ignore-leading-blanks игнорировать начальные пропуски -d, --dictionary-order рассматривать только пропуски, буквы и цифры -f, --ignore-case игнорировать регистр букв -g, --general-numeric-sort сравнивать в соответствии с общим числовым значением -i, --ignore-nonprinting рассматривать только печатные символы -M, --month-sort сравнивать (неизвестно) < «JAN» < … < «DEC» -h, --human-numeric-sort сравнивать числа в удобном для человека виде (например, 2K 1G) -n, --numeric-sort сравнивать по числовым значениям строк -R, --random-sort перетасовать, но группировать одинаковые параметры, смотрите shuf(1) --random-source=ФАЙЛ брать случайные байты из ФАЙЛА -r, --reverse изменить результаты сравнения на противоположные --sort=СЛОВО сортировать согласно СЛОВУ: general-numeric -g, human-numeric -h, month -M, numeric -n, random -R, version -V -V, --version-sort сортировать по номерам (версии) в текстовом представлении Другие параметры: --batch-size=NMERGE объединять не более чем NMERGE ввода за раз; для большего — использовать временные файлы -c, --check, --check=diagnose-first проверять, сортированы ли входные файлы; сортировка не выполняется -C, --check=quiet, --check=silent как -c, но не сообщать о первой плохой строке --compress-program=ПРОГ сжимать временные файлы командой ПРОГ; разжимать командой ПРОГ -d --debug комментировать часть строки, используемой для сортировки и предупреждать о сомнительном использовании в stderr --files0-from=Ф читать ввод из файлов, имена которых (завершённые нулем) перечислены в файле Ф. Если Ф равно -, то читать имена файлов из стандартного ввода -k, --key=ОПР_КЛЮЧА сортировать по ключу; в ОПР_КЛЮЧА задано расположение и тип -m, --merge объединить уже отсортированные файлы, сортировку не выполнять -o, --output=ФАЙЛ выводить в ФАЙЛ, а не на стандартный вывод -s, --stable стабилизировать сортировку, исключив проверку на равенство -S, --buffer-size=РАЗМЕР использовать в основной памяти буфер указанного РАЗМЕРА -t, --field-separator=РАЗДЕЛИТЕЛЬ использовать при поиске ключевых полей РАЗДЕЛИТЕЛЬ, а не переход от непробельных символов к пробельным -T, --temporary-directory=КАТАЛОГ использовать для временных файлов КАТАЛОГ, а не $TMPDIR или /tmp; несколько таких параметров задают несколько каталогов --parallel=N изменить количество одновременно запущенных сортировок до N -u, --unique с -c, проверять порядок строго; без -c, выводить только первое среди нескольких равных -z, --zero-terminated разделитель строк NUL, а не символ новой строки --help показать эту справку и выйти --version показать информацию о версии и выйти ОПР_КЛЮЧА задается как F[.C][OPTS][,F[.C][OPTS]] для начала и конца положения, где F — номер поля, а C — позиция в поле, оба отсчитываются от 1, а конечная позиция по умолчанию равна концу строки. Если не задан параметр -t или -b, то символы в поле отсчитываются от начала предшествующего пробельного символа. OPTS составляется из одной или нескольких букв, задающих порядок сортировки [bdfgiMhnRrV]; он переопределяет соответствующие глобальные параметры сортировки для данного ключевого поля. Если параметр не задан, то в качестве ключа используется строка целиком. Для обнаружения использования некорректного ключа укажите --debug. После РАЗМЕРА можно указывать следующие суффиксы-мультипликаторы: % 1% памяти, b 1, k 1024 (по умолчанию), и так далее для M, G, T, P, E, Z, Y. ПРЕДУПРЕЖДЕНИЕ Установленная в окружении локаль влияет на порядок сортировки. Чтобы получить традиционный порядок, использующий системные значения байт, установите LC_ALL=C.