Sort
sort — Команда сортировки и/или слияния файлов.
Содержание
Синтаксис
sort [-c] [-m] [-u] [-o выходной_файл] [-yкилобайт] [-zдлина]
- [-d] [-f] [-i] [-M] [-n] [-r] [-b] [-tразделитель]
- [+позиция_1 [-позиция_2]] [файл ...]
Описание
Команда sort сортирует строки, входящие во все исходные файлы, и выдаёт результат на стандартный вывод. Если имена файлов не указаны, или в качестве файла указан -, исходная информация поступает со стандартного ввода. При упорядочении используется один или несколько ключей сортировки, выделяемых из каждой вводимой строки. По умолчанию ключ сортировки один – вся строка, а порядок является лексикографическим, соответствующим принятой кодировке символов.
- Основные параметры:
Обязательные аргументы для длинных форм параметров являются также обязательными и для коротких форм.
- -b, --ignore-leading-blanks
- игнорировать пробелы в начале сортируемых полей или начале ключей
- -d, --dictionary-order
- воспринимать в составе ключей лишь буквы (латинского алфавита), цифры и пробелы, игнорируя все прочие символы
- -f, --ignore-case
- во время сортировки преобразует строчные (маленькие) в соответствующие прописные (большие) буквы, т.е. выполняется сортировка нечувствительная к регистру символов
- -g, --general-numeric-sort
- выполнять сравнение в соответствии с общим числовым значением (используют совместно с параметром -b). Это численная сортировка, при которой дополнительно распознаётся экспоненциальное представление чисел (например, 9.1019e7)
- -i, --ignore-nonprinting
- в ключах рассматриваются только печатаемые (ASCII) символы, а остальные игнорируются
- -M, --month-sort
- выполнять сравнение по трёх-символьным сокращениям англоязычных названий месяцев, т.е. (незнакомое) < `JAN' < ... < `DEC'
- -n, --numeric-sort
- числовая сортировка, т.е. сравнение ведётся по числовому значению (используют совместно с параметром -b)
- -r, --reverse
- сортировка выполняется в обратном порядке (по убыванию)
- -yкилобайт
- количество дополнительной памяти, используемой командой sort, существенно влияет на скорость её работы. Если опция -y отсутствует, sort начинает работу, используя область памяти некоторого стандартного размера, а в случае необходимости запрашивает дополнительную память. Если опция -y задана с аргументом, команда sort начинает работу, используя указанное число килобайт памяти, если только не нарушены ограничения сверху или снизу; в этом случае используется соответствующее крайнее значение. Таким образом, указание -y0 гарантирует использование минимального объема памяти. Опция -y без аргумента задаёт область памяти максимального размера.
- -zдлина
- во время сортировки запоминается размер самой длинной строки, так что для фазы слияния команда sort может отвести буфер нужного размера. Если, в силу действия опций -c или -m, фаза сортировки пропускается, используется некоторый стандартный размер. Наличие строк, превышающих по длине буфер, приводит к аварийному завершению команды. Задание заведомо достаточной длины гарантирует нормальное выполнение слияния.
- Другие параметры
- -c, --check
- проверяет сортировался ли указанный файл. Если да, то не выполняет сортировку, иначе выводит сообщение об ошибке
- -k, --key=ПОЗ1[,ПОЗ2]
- выбирает ключ сортировки, начиная с позиции ПОЗ1 и заканчивая позицией ПОЗ2 (включительно). Номера полей и смещения символов указываются, начиная с 1
- -m, --merge
- объединяет ранее отсортированные ФАЙЛЫ, которые не сортируются повторно
- -o, --output=ФАЙЛ
- выводит результат в указанный файл ФАЙЛ вместо стандартного вывода
- -s, --stable
- стабилизирует сортировку, не выполняя сравнения последней пересортировки
- -S, --buffer-size=РАЗМЕР
- под основной буфер в памяти использует область размером РАЗМЕР
- -t, --field-separator=СИМВОЛ
- использовать СИМВОЛ в качестве разделителя полей
- -T, --temporary-directory=КАТАЛОГ
- использует указанный КАТАЛОГ для временных файлов, игнорируя переменную окружения $TMPDIR или /tmp; составные параметры могут указывать на различные каталоги
- -u, --unique
- уникальная сортировка: игнорирует повторяющиеся строки. Обычно применяют с параметром -c для проверки сортированных файлов с целью прерывания выполнения, если встретится несколько одинаковых строк подряд; без -c выводится только первая строка из одинаковых
- -z, --zero-terminated
- вместо символа новой строки (newline), завершает строки двоичным 0
- --help
- вывести справку о программе, её параметрах и завершить работу
- --version
- вывести информацию о версии программы и завершить работу
Синтаксис параметра -k, --key=ПОЗ1[,ПОЗ2] означает следующее:
ПОЗ указывается в формате F[.C][OPTS], где F является порядковым номером поля, а C позицией символа в этом поле. OPTS представляет собой одну или более одиночных букв, которые означают рассмотренные выше параметры и их действие перекрывает действие глобальных параметров для этого ключа. Если ни один ключ не задан, в качестве ключа используется вся строка. Ключ сортировки — это часть строки, которая рассматривается при сортировке, вместо того чтобы рассматривалась вся строка. Таким образом, команда:
- sort -k1.3
осуществляет сортировку по первому полю, начиная с его третьего символа. Команда:
- sort -k4.6,7n
означает сортировку с 6-го символа четвёртого поля до 1-го символа седьмого поля. Сортировка ведётся по числовому значению. Допускается задание нескольких параметров -k для того, чтобы определить несколько ключей, которые будут использованы последовательно в том порядке, в котором они указаны в командной строке. Величина размера SIZE памяти, отводимой для работы команды sort может быть задана со следующими суффиксами: %-1% от общей памяти; b — в байтах; K — 1024 байт (по умолчанию); и соответственно для M, G, T, P, E, Z, Y. Если в командной строке не указан никакой файл или вместо имени стоит дефис, считывается стандартный ввод (с клавиатуры).
Примеры
- Отсортировать файл 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
Диагностика
Если в последней строке файла пропущен символ возврата каретки, то он добавляется автоматически, о чем выдаётся предупреждение.
Предостережения
Не гарантируется сохранение порядка следования строк с равными ключами. Не оговаривается приоритет различных способов сравнения (например, числового и словарного), поэтому задавать комбинацию флагов dMn не имеет смысла.