sort — це програма Unix-подібних операційних систем, яка повертає текст у відсортованому порядку. Вхідні дані вона отримує через stdin або з файлів які були задані через аргументи. Команда підтримує низку параметрів командного рядка, які можуть відрізнятися залежно від реалізації, котрі керують в якому порядку сортувати дані.
Історія Команда sort, яка реалізовувала тривіальне сортування, була вперше реалізована в Multics. Пізніше sort з'явилась у версії UNIX System v1. Її написав Кен Томпсон в AT&T Bell Laboratories. До UNIX System v4 команда sort потребувала опцію назви вхідного файлу, оскільки вона використовувалася для сортування файлів. Потім Томпсон модифікував її для використання конвеєрів. А в UNIX version 5 Томпсон винайшов значення «-» як ім'я файлу, що означало що замість файлу дані для сортування поступатимуть зі стандартного введення. Зараз такий підхід часто використовується в інших командах, таких як tar.
Версія sort, яка включена в GNU coreutils, була написано Майком Хертелем і Полом Еггертом. Ця реалізація використовує алгоритм сортування злиттям.
Подібні команди доступні в багатьох інших операційних системах.
Синтаксис sort [ОПЦІї]... [ФАЙЛ]... Якщо параметр ФАЙЛ відсутній, або коли ФАЙЛ дорівнює -, команда читає дані зі стандартного вводу.
Параметри Підтримка опції та функціональності в залежності від дистрибутива.
NameDescriptionUnixPlan 9InfernoFreeBSDLinuxMSX-DOSIBM i-b,--ignore-leading-blanksІгнорувати пусті символі на початку -cне сортувати, а лише перевірити що текст відсортований -Cяк і -c але не показувати перший невідсортований рядок -d,--dictionary-orderConsiders only blanks and alphanumeric characters. -f,--ignore-caseІгнорувати регістр розкладки -g,--general-numeric-sort,--sort=general-numericCompares according to general numerical value. -h,--human-numeric-sort,--sort=human-numericПорівнює числові значення з префіксами (тобто 2K 1G) згідно числового значення. -i,--ignore-nonprintingІгнорує невидимі та спеціальні символи при порівняння. -k,--key=POS1[,POS2]Start a key at POS1 (origin 1), end it at POS2 (default end of line) -mоб'єднати завчасно відсортовані файли. -M,--month-sort,--sort=monthПорівнювати назви місяців згідно таких правил: (невідомо) < 'JAN' < … < 'DEC'. -n,--numeric-sort,--sort=numericПорівнювати рядки з числами згідно їх ординального значення. -o OUTPUTПовертає результат в файл OUTPUT замість стандартного виводу. -r,--reverse,/R (MSX-DOS)Повертає результат в зворотному порядку -R,--random-sort,--sort=randomПеремішує результат в випадковому порядку. Дивиться також shuf. -sСтабілізує сортування, вимикаючи last-resort comparison. -S size, --buffer-size=sizeВказує скільки оперативної пам'яті виділяти для буферизації. -txВказує використовувати символ табуляції сепаратором полів. -t char,--field-separator=charВказує використовувати символ char символом сепаратора полів. -T dir,--temporary-directory=dirВказує який каталог використовувати для тимчасових даних . -u,--uniqueПовертає лише унікальні рядки, в випадку якщо дублюються ключі. -V,--version-sortПриродне сортування версій згідно значень чисел в розділених крапками. -wLike -i, but ignore only tabs and spaces. -z,--zero-terminatedВважає що рядок розділяється символом NUL а не Newline --helpПовертає довідку та виходить --versionПовертає номер версії та виходить /RПовертає результат в зворотному порядку /SSpecify the number of digits to determine how many digits of each line should be judged. /ASort by ASCII code. /HInclude hidden files when using wild cards.
Приклади
Сортування файлу в алфавітному порядку Нехай у нас є телефонна книга: $ cat phonebook ТКАЧЕНКО НАТАЛІЯ 123-1324 БОНДАРЕНКО ОЛЕНА 123-1234 КОВАЛЕНКО ТЕТЯНА 123-3241 МЕЛЬНИК ВОЛОДИМИР 123-2132 ШЕВЧЕНКО ОЛЕКСАНДР 123-3214 КРАВЧЕНКО СЕРГІЙ 123-4321 Відсортуємо її: $ sort phonebook БОНДАРЕНКО ОЛЕНА 123-1234 КОВАЛЕНКО ТЕТЯНА 123-3241 КРАВЧЕНКО СЕРГІЙ 123-4321 МЕЛЬНИК ВОЛОДИМИР 123-2132 ТКАЧЕНКО НАТАЛІЯ 123-1324 ШЕВЧЕНКО ОЛЕКСАНДР 123-3214
Це алфавітне сортування, за замовчуванням сортує згідно таблиці кодування UTF-8 (або ASCII для певних значень). В алфавітному сортуванні значення рядка 10 більше ніж 1, але менше ніж 2, тому що 2 порівнюється зі значенням першого символу 1 з рядка 10.
Нехай у нас у файлі numbers рядки з числами 1, 2, 3, 10, 11, 12, 100, 101, 111 $ sort numbers 1 10 100 101 11 111 12 2 3
Сортування за значенням числа Опція -n змушує програму сортувати відповідно до числового значення:$ sort -n numbers 1 2 3 10 11 12 100 101 111
Стовпці, колонки, або поля Опція -k використовується для сортування за певним стовпцем. Наприклад " -k 2 " відсортує телефонну книгу за ім'ям, а -k 3 за номером телефона, розглядаючи пробіл (або суміжні пробіли) як, символ що розділяє стовпці (сепаратор).$ cat phonebook | sort -k 2 МЕЛЬНИК ВОЛОДИМИР 123-2132 ТКАЧЕНКО НАТАЛІЯ 123-1324 ШЕВЧЕНКО ОЛЕКСАНДР 123-3214 БОНДАРЕНКО ОЛЕНА 123-1234 КРАВЧЕНКО СЕРГІЙ 123-4321 КОВАЛЕНКО ТЕТЯНА 123-3241
$ cat phonebook | sort -k 3 БОНДАРЕНКО ОЛЕНА 123-1234 ТКАЧЕНКО НАТАЛІЯ 123-1324 МЕЛЬНИК ВОЛОДИМИР 123-2132 ШЕВЧЕНКО ОЛЕКСАНДР 123-3214 КОВАЛЕНКО ТЕТЯНА 123-3241 КРАВЧЕНКО СЕРГІЙ 123-4321
Сортування у випадковому порядку Реалізація GNU має опцію -R --random-sort, кожен запуск такого сортування видає рядки в випадковому порядку, можна сказати що випадково перемішує рядки. Але це не є повністю чесне випадкове перемішування, оскільки воно сортує на основі хешування рядка та випадкових даних, і виводить ідентичні рядки разом. Справжнє випадкове сортування забезпечує утиліта shuf.
Сортувати за версією Реалізація GNU має опцію -V --version-sort, це сортування номерів версій в з урахуванням majority, крапки як символу сепаратора, та числового порядку значень, пропускаючи початкові нулі, а також літер що йдуть за числами. Виявляється що це працює і для адрес IPv4.
Примітки