Введение
Стандартная утилита UNIX
В информатике, команда `sort` — это стандартная программа командной строки операционных систем Unix и Unix-подобных систем, которая выводит строки входных данных или объединение всех файлов, перечисленных в списке аргументов, в отсортированном порядке. Сортировка выполняется на основе одного или нескольких ключей сортировки, извлеченных из каждой строки входных данных. По умолчанию, вся строка используется в качестве ключа сортировки. Пробел является разделителем по умолчанию. Команда поддерживает множество опций командной строки, которые могут различаться в зависимости от реализации. Например, флаг "r" меняет порядок сортировки на обратный.
История
Команда, вызывающая общую систему сортировки, была впервые реализована в Multics. Позже она появилась в Unix версии 1. Эта версия была первоначально написана Кеном Томпсоном в AT&T Bell Laboratories. К версии 4 Томпсон модифицировал её для использования конвейеров, но команда sort сохранила возможность указания имени выходного файла, поскольку она использовалась для сортировки файла на месте. В версии 5 Томпсон ввёл символ " " для обозначения стандартного ввода. Версия, включённая в GNU coreutils, была написана Майком Хаертелем и Полом Эггертом. Эта реализация использует алгоритм сортировки слиянием. Аналогичные команды доступны во многих других операционных системах, например, команда является частью ASCII MSX DOS2 Tools для MSX DOS версии 2. Команда также была портирована на операционную систему IBM i.
Синтаксис
sort [OPTION] [FILE]
Если FILE не указан или является пустой строкой, команда читает данные из стандартного ввода.
Параметры
Название Описание Unix Plan 9 Inferno FreeBSD Linux MSX DOS IBM i b, игнорировать начальные пробелы Игнорирует начальные пробелы. ✔ ✔ ✔ ✔ c Проверить, отсортирован ли входной файл. ✔ ✔ ✔ ✔ C Как и c, но не выводит номер первой ошибочной строки. ✔ ✔ d, словарный порядок Учитываются только пробелы и буквенно-цифровые символы. ✔ ✔ ✔ ✔ f, игнорировать регистр Приводит символы нижнего регистра к верхнему. ✔ ✔ ✔ ✔ g, общая числовая сортировка, sort=general numeric Сравнивает по общему числовому значению. ✔ ✔ ✔ h, удобочитаемая числовая сортировка, sort=human numeric Сравнивает удобочитаемые числа (например, 2K 1G). ✔ ✔ ✔ i, игнорировать непечатаемые символы Учитываются только печатаемые символы. ✔ ✔ ✔ ✔ k, key=POS1[,POS2] Начать ключ с позиции POS1 (отсчет от 1), закончить на позиции POS2 (по умолчанию – конец строки). ✔ ✔ m Объединять только; предполагается, что входные файлы предварительно отсортированы. ✔ ✔ ✔ ✔ M, сортировка по месяцам, sort=month Сравнивает (неизвестно) < 'ЯНВ' < < 'ДЕК'. ✔ ✔ ✔ ✔ n, числовая сортировка, sort=numeric Сравнивает по числовому значению строки. ✔ ✔ ✔ ✔ ✔ o OUTPUT Использовать файл OUTPUT вместо стандартного вывода. ✔ ✔ ✔ r, обратная сортировка Изменяет порядок сравнений на обратный. ✔ ✔ ✔ ✔ ✔ R, случайная сортировка, sort=random Перемешивает, но группирует одинаковые ключи. См. также: shuf ✔ ✔ ✔ s Стабилизировать сортировку, отключив последнее сравнение. ✔ ✔ S size, buffer size=size Использовать размер для максимального размера буфера памяти. ✔ tx Символ табуляции, разделяющий поля, равен x. ✔ ✔ ✔ t char, разделитель полей=char Использовать символ char вместо перехода от непробельного символа к пробельному. ✔ ✔ T dir, временная директория=dir Использовать директорию dir для временных файлов. ✔ ✔ ✔ u, уникальные строки Обрабатывать только уникальные строки, подавляя все, кроме одной, в каждой группе строк с одинаковыми ключами. ✔ ✔ ✔ V, сортировка версий Естественная сортировка (номеров) версий в тексте. ✔ ✔ w Как i, но игнорировать только табуляции и пробелы. ✔ z, завершение нулем Завершать строки нулевым байтом, а не символом новой строки. ✔ ✔ help Вывести справку и выйти. ✔ ✔ version Вывести информацию о версии и выйти. ✔ ✔ /R Изменить порядок сравнений на обратный. ✔ /S Указать количество цифр для определения количества значащих цифр в каждой строке. ✔ /A Сортировать по коду ASCII. ✔ /H Включить скрытые файлы при использовании подстановочных знаков. ✔
Сортировка по случаю
В реализации GNU имеется опция случайной сортировки R, основанная на хешировании; это не полная случайная перестановка, поскольку она группирует идентичные строки вместе. Настоящая случайная сортировка предоставляется утилитой Unix shuf.
Сортировка по версиям
В реализации GNU есть опция сортировки по версии V, представляющая собой естественную сортировку чисел, представленных в виде текста. Две сравниваемые текстовые строки разбиваются на блоки букв и блоки цифр. Блоки букв сравниваются лексикографически, а блоки цифр – численно (то есть, ведущие нули игнорируются, большее количество цифр означает большее значение, в противном случае результат определяется первой слева различающейся цифрой). Блоки сравниваются слева направо, и первый несовпадающий блок определяет, какая строка больше. Это эффективно работает для IP-адресов, строк версий пакетов Debian и подобных задач, где числа переменной длины встроены в строки.