При работе с большими файлами не обязательно выводить на экран весь файл, если требуется просмотреть только его начало и конец. Существуют удобные команды head и tail, упрощающие подобную задачу. Команда head отбирает первые п строк файла (по умолчанию 10), а команда tail — последние я строк (по умолчанию тоже 10).
Предположим, требуется быстро узнать, какой фильм пользуется наименьшим спросом в прокате. Для этого отсортируем файл по четвертому полю и направим результат команде head, задав в ней отображение одной строки:
$ sort -t: — k4 video.txt | head -1
Alien:HK:119:1982
Аналогичным образом можно выяснить, какой фильм чаще всего заказывали в этом году. Формат команды sort останется таким же, но результат будет передан команде tail:
$ sort -t: — k4 video.txt | tail -1
A few Good Men:KL:445:5851
Может возникнуть необходимость по результатам сортировки отобразить небольшое итоговое сообщение. Сделать это легко, если воспользоваться возможностями утилиты awk. В следующем примере сведения о фильме с наименьшим объемом проката за год посредством канала направляются утилите awk, которая дополняет их поясняющим текстом. В качестве разделителя полей в обеих утилитах применяется двоеточие.
$ sort -t: — k4 video.txt | head -1 | \
awk -F: '{print "Worst rental", $1, "has been rented", $3, "times"}'
Worst rental Alien has been rented 119 times
Прежде чем объединять два файла, их необходимо отсортировать, иначе результат будет неотсортированным. Предположим, нам прислали файл video2.txt, содержащий дополнения к уже имеющемуся перечню фильмов, причем этот файл отсортирован:
$ cat video2.txt
Crimson Tide:134:2031 Die Hard:152:2981
Необходимо объединить его с файлом video.txt. Для этого нужно предварительно создать отсортированную версию файла video.txt, которую назовем video.sort, а затем применить команду sort с опцией -m:
$ sort -t: — m -k1 video2.txt video.sort
A Few Good Men:KL:445:5851
Alien:HK:119:1982
Aliens:HK:532:4892
Boys in Company C:HK:192:2192
Crimson Tide:134:2031
Die Hard:152:2981
Star Wars:HK:301:4102
The Hill:KL:63:2972
Toy Story:HK:239:3972
Команда sort может применяться для сортировки имен пользователей в файле /etc/passwd. Достаточно выполнить сортировку содержимого этого файла по первому полю, которое включает регистрационные имена, а затем по каналу передать полученный результат утилите awk. Последняя отобразит содержимое только первого поля данного файла:
$ cat /etc/pasawd | sort -t: — k1 | awk -F: '{print $1}'
adm bin daemon
Команда sort может работать совместно с командой df, выводя на экран информацию об имеющихся файловых системах в порядке убывания процента используемого ими дискового пространства. Ниже приводится образец работы команды df:
$ df
Filesystem Ik‑blocks Used Available Use% Mounted on
/dev/hda5 495714 291027 179086 62% /
/dev/hda1 614672 558896 55776 91% /dos
Выполним сортировку по полю 5, содержащему процент дискового пространства, занимаемого файловой системой, только предварительно с помощью редактора sed удалим первую строку. В процессе сортировки также воспользуемся опцией -b, которая позволяет игнорировать любое количество начальных пробелов.
$ df | sed '1d' | sort -b -r -k5
/dev/hda1 614672 558896 55776 91% /dos
/dev/hda5 495714 291027 179086 62% /
11.2. Удаление повторяющихся строк с помощью команды uniq
Команда uniq применяется для удаления идущих подряд повторяющихся строк из текстового файла. Для правильного применения команды uniq важно, чтобы рассматриваемый файл был отсортирован. Однако это требование не является обязательным. Можно обращаться к произвольному неупорядоченному тексту и даже сравнивать отдельные фрагменты строк.