$ 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 Hilclass="underline" 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 Hilclass="underline" 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 Hilclass="underline" 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 Hilclass="underline" KL:63:2972
Toy Story:HK:239:3972
Star Wars:HK:30class="underline" 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 Hilclass="underline" KL:63:2972
Здесь ссылка на первое поле в действительности означает ссылку на всю строку, т. е. ключ с меньшим приоритетом включает в себя ключ с большим приоритетом, поэтому команда sort ведет себя не так, как можно было бы предположить на первый взгляд. Чтобы исправить ситуацию, необходимо четко указать длину каждого из ключей: