$ sort video.txt | sort -c $
Сообщение не появилось, таким образом, файл является отсортированным.
11.1.6. Простейшая сортировка
В простейшем случае, чтобы отсортировать файл, достаточно передать его имя команде sort. Сортировка будет выполнена по строкам:
$ sort video.txt
A Few Good Men:KL:445:5851
A. Iien:HK:119:1982
Aliens:HK:532:4892
Boys in Company C:HK:192:2]92
Star Wars:HK:301:4102
The tfili:KL:63:2972
Toy Story. HK:239:3972
11.1.7. Сортировка а обратном порядке
Если необходимо отсортировать строки не по возрастанию, а по убыванию, задайте опцию -r:
$ sort -r video.txt
Toy Story:HK:239:3972
The H111:KL:63:2972
Star Wars:HK:301:4102
Boys in Company С:HK:192:2192
Aliens:HK:532:4892
Alien:HK:119:1982
A Few Good Men:KL:445:5851
11.1.8. Сортировка по заданному полю
В следующем примере файл сортируется по кодам фирм–дистрибьюторов. Поскольку требуемая информация находится во втором поле (ключ сортировки 1(, следует указать опцию +1. Кроме того, необходимо задать разделитель полей с помощью опции -t:, чтобы команда sort знала, как найти второе поле.
$ sort -t: +1 video.txt
Alien:HK:119:1982
Boys in Company С:HK:192:2192
Toy Story:HK:239:3972
Star Wars:HK:301;4102
Aliens:HK:532:4892
A Few Good Men:KL:445:5851
The Hill; KL:63:2972
Обратите внимание на то, что третье и четвертое поля также были отсортированы. Такова стандартная процедура: все последующие поля по умолчанию считаются ключами сортировки, расположенными в порядке убывания приоритета. Причем если вы посмотрите на конечные две строки, то заметите, что к этим полям применялась не числовая, а текстовая сортировка, учитывающая расположение символов в таблице ASCII–кодов. Поэтому поле со значением 445 оказалось расположенным раньше поля со значением 63.
11.1.9. Сортировка по числовому полю
Чтобы корректно отсортировать файл по четвертому, числовому, полю, укажите не только ключ сортировки (+3), но и опцию -n, включающую режим числовой сортировки. Следующая команда сортирует список фильмов по объемам проката видеокассет за год:
$ sort -t: +3n video.txt
Alien:HK:119:1982
Boys in Company C:HK:192:2192
The Hill:KL:63:2972
Toy Story:HK:239:3972
Star Wars:HK:301:4102
Aliens:HK:532:4B92
A Few Good Men:KL:445:5851
Таким образом, можно заключить, что фильм "A Few Good Men" ("Несколько хороших парней", 1992 г.) является лидером видеопроката в текущем году.
Примечание:
Несмотря на наличие опции -n, данный пример работает правильно только потому, что четвертое поле является последним в строке. Причина этого объясняется ниже.
11.1.10. Сортировка с отбрасыванием повторяющихся строк
Иногда приходится иметь дело с файлом, содержащим повторяющиеся строки. Чтобы избавиться от них, достаточно воспользоваться командой sort с опцией — и. Ниже показан вариант тестового файла, в котором запись о фильме "Alien" ("Чужой", 1977 г.) повторяется дважды:
$ cat video.txt
Boys in Company С:HK:192:2192
Alien:HK:119:1982
The Hill:KL:63:2972
Aliens:HK:532:4892
Star Wars:HK:301:4102
A Few Good Men:KL.445:5851
Toy Story:HK:239:3972
Alien:HK:119:1982
Вот что получится в результате применения команды sort -u:
$ sort -и video.txt
A Few Good Men:KL:445:5851
Alien:HK:119:1982
Aliens:HK:532;4892
Boys in Company С: НК:192:2192
Star Wars:HK:301:4102
The Hill:KL:63:2972
Toy Story:HK:239:3972
11.1.11. Задание ключа сортировки с помощью опции -k
Команда sort позволяет задать ключ сортировки немного по–другому. Если воспользоваться опцией — к, то поля (ключи сортировки) можно будет нумеровать, начиная с единицы, а не с нуля, что, в принципе, удобнее. Таким образом, чтобы выполнить сортировку по полю 4, достаточно задать опцию -k4n. Это позволит упорядочить список фильмов по объемам видеопроката за год.
$ sort -t: — k4n video.txt
Alien:HK:119:l982
Boys in Company C:HK:192:2192
The Hill:KL:63:2972
Toy Story:HK:239:3972
Star Wars:HK:30l:4102
Aliens:HK:532:4892
A Few Good Men:KL:445:5851
11.1.12. Несколько ключей сортировки
При использовании опций +позиция и -k следует быть особенно аккуратным. Если вы внимательно прочитали их описание в табл. 11.1, то должны были отметить такой факт: когда не указана конечная позиция, ключ сортировки считается заканчивающимся в конце строки. Подобная тонкость обычно вводит в замешательство новичков, которые пытаются выполнять числовую сортировку или сортировку с несколькими ключами. Если, к примеру, вы ссылаетесь на числовое поле только по номеру, а это поле не является последним в строке, причем за ним идут текстовые поля, данное поле также будет проинтерпретировано как текстовое, вследствие чего будут получены неправильные результаты.
Схожая проблема возникает при работе с несколькими ключами сортировки. Рассмотрим такой пример. Предположим, требуется отсортировать список фильмов по кодам дистрибьюторов (второе поле), а затем по названиям фильмов (первое поле). Если сослаться на поля по номерам, получим следующее:
$ sort -t: — k2 -kl video.txt
Alien:HK.119:1982
Boys in Company C:HK:192:2192
Toy Story:HK:239:3972
Star Wars:HK:301:4102
Aliens:HK:532:4892
A Few Good Men:KL:445:5851
The Hill:KL:63:2972
Здесь ссылка на первое поле в действительности означает ссылку на всю строку, т. е. ключ с меньшим приоритетом включает в себя ключ с большим приоритетом, поэтому команда sort ведет себя не так, как можно было бы предположить на первый взгляд. Чтобы исправить ситуацию, необходимо четко указать длину каждого из ключей:
$ sort -t: — k2,2 -k1,1 video.txt
Alien:HK:119:1982
Aliens:HK:532:4892
Boys in Company C:HK:132:2192
Star Wars:HK:301;4102
Toy Story:HK:239:3972
A Few Good Men:KL:445:5851
The Hill:KL:63:2972
Опция -k2,2 ограничивает ключ сортировки вторым полем, а опция -kl,1 — первым.
11.1.13. Указание позиции, с которой начинается сортировка
Иногда в качестве ключа сортировки требуется задать не целое поле, а какую‑то его часть. В этом случае после номера поля необходимо через точку указать позицию символа, являющегося первым в ключе.
Обратимся к примеру. Допустим, в нашем тестовом файле к каждому коду фирмы–дистрибьютора добавлен код региона дистрибуции:
$ cat video.txt
Boys in Company C:HK48:192:2192 Alien:HK57:H9:1982
The Hill:KL23:63:2972
Aliens:НК11: — 5Э2г4892
Star Wars:HK38:301:4102
A Few Good Men:KL87:445:5851
Toy Story:HK65:239:3972
Теперь мы хотим отсортировать файл по кодам регионов. Вот как можно это сделать:
$ sort -t: — k2.3,2,4n video.txt
Aliens:HK13:532:4892
The Hill:KL23:63:2972
Star Wars:HK38:301:4102
Boys in Company C:HK48:192:2192
Alien:HK57:119:1982
Toy Story:HK65:239:3972
A Few Good Men:KL87:445:5851
Данная команда означает, что ключом сортировки являются третий и четвертый символы второго поля.
11.1.14. Обработка результатов сортировки с помощью команд head и tail
При работе с большими файлами не обязательно выводить на экран весь файл, если требуется просмотреть только его начало и конец. Существуют удобные команды head и tail, упрощающие подобную задачу. Команда head отбирает первые п строк файла (по умолчанию 10), а команда tail — последние я строк (по умолчанию тоже 10).