Sort
sort — це програма Unix-подібних операційних систем, яка повертає текст у відсортованому порядку. Вхідні дані вона отримує через stdin або з файлів які були задані через аргументи. Команда підтримує низку параметрів командного рядка, які можуть відрізнятися залежно від реалізації, котрі керують в якому порядку сортувати дані.
Історія
Команда sort
, яка реалізовувала тривіальне сортування, була вперше реалізована в Multics.[1] Пізніше sort
з'явилась у версії UNIX System v1
. Її написав Кен Томпсон в AT&T Bell Laboratories. До UNIX System v4
команда sort
потребувала опцію назви вхідного файлу, оскільки вона використовувалася для сортування файлів. Потім Томпсон модифікував її для використання конвеєрів. А в UNIX version 5 Томпсон винайшов значення «-
» як ім'я файлу, що означало що замість файлу дані для сортування поступатимуть зі стандартного введення. Зараз такий підхід часто використовується в інших командах, таких як tar.
Версія sort
, яка включена в GNU coreutils, була написано Майком Хертелем і Полом Еггертом.[2] Ця реалізація використовує алгоритм сортування злиттям.
Подібні команди доступні в багатьох інших операційних системах.
Синтаксис
sort [ОПЦІї]... [ФАЙЛ]...
Якщо параметр ФАЙЛ
відсутній, або коли ФАЙЛ
дорівнює -
, команда читає дані зі стандартного вводу.
Параметри
Підтримка опції та функціональності в залежності від дистрибутива.
Ця Sort_(computing) містить неперекладені фрагменти англійською мовою. Ви можете допомогти проєкту, переклавши їх українською. |
Name | Description | Unix | Plan 9 | Inferno | FreeBSD | Linux | MSX-DOS | IBM i |
---|---|---|---|---|---|---|---|---|
-b, --ignore-leading-blanks | Ігнорувати пусті символі на початку | Так | Так | Ні | Так | Так | Ні | Так |
-c | не сортувати, а лише перевірити що текст відсортований | Ні | Так | Ні | Так | Так | Ні | Так |
-C | як і -c але не показувати перший невідсортований рядок | Ні | Ні | Ні | Так | Так | Ні | Ні |
-d, --dictionary-order | Considers only blanks and alphanumeric characters. | Так | Так | Ні | Так | Так | Ні | Так |
-f, --ignore-case | Ігнорувати регістр розкладки | Так | Так | Ні | Так | Так | Ні | Так |
-g, --general-numeric-sort, --sort=general-numeric | Compares 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 | Природне сортування версій згідно значень чисел в розділених крапками. | Ні | Ні | Ні | Так | Так | Ні | Ні |
-w | Like -i, but ignore only tabs and spaces. | Ні | Так | Ні | Ні | Ні | Ні | Ні |
-z, --zero-terminated | Вважає що рядок розділяється символом NUL а не Newline | Ні | Ні | Ні | Так | Так | Ні | Ні |
--help | Повертає довідку та виходить | Ні | Ні | Ні | Так | Так | Ні | Ні |
--version | Повертає номер версії та виходить | Ні | Ні | Ні | Так | Так | Ні | Ні |
/R | Повертає результат в зворотному порядку | Ні | Ні | Ні | Ні | Ні | Так | Ні |
/S | Specify the number of digits to determine how many digits of each line should be judged. | Ні | Ні | Ні | Ні | Ні | Так | Ні |
/A | Sort by ASCII code. | Ні | Ні | Ні | Ні | Ні | Так | Ні |
/H | Include 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.
Примітки
- п
- о
- р
- lp[en]