Вот что получится в результате применения команды 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

<p><emphasis><strong>11.1.11. Задание ключа сортировки с помощью опции -k</strong></emphasis></p>

Команда 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

<p><emphasis><strong>11.1.12. Несколько ключей сортировки</strong></emphasis></p>

При использовании опций +позиция и -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 — первым.

<p><emphasis><strong>11.1.13. Указание позиции, с которой начинается сортировка</strong></emphasis></p>

Иногда в качестве ключа сортировки требуется задать не целое поле, а какую‑то его часть. В этом случае после номера поля необходимо через точку указать позицию символа, являющегося первым в ключе.

Обратимся к примеру. Допустим, в нашем тестовом файле к каждому коду фирмы–дистрибьютора добавлен код региона дистрибуции:

$ 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

Данная команда означает, что ключом сортировки являются третий и четвертый символы второго поля.

<p><emphasis><strong>11.1.14. Обработка результатов сортировки с помощью команд head и tail</strong></emphasis></p>
Перейти на страницу:

Похожие книги