Шрифт:
The Hill:KL:63:2972
Toy Story:HK:239:3972
11.1.17. Дополнительные примеры команды sort
Команда 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 важно, чтобы рассматриваемый файл был отсортирован. Однако это требование не является обязательным. Можно обращаться к произвольному неупорядоченному тексту и даже сравнивать отдельные фрагменты строк.
Эту команду можно рассматривать как вариант опции — и команды sort. Следует, однако, учитывать весьма важное отличие. Опция -u позволяет избавиться от всех одинаковых строк в файле, тогда как команда uniq обнаруживает повторяющиеся строки только в том случае, когда они следуют одна за другой. Если же на вход команды uniq подать отсортированный файл, то действие команд sort -u и uniq будет одинаковым.
Рассмотрим пример. Имеется следующий файл:
$ cat myfile.txt
May Day
May Day
May Day
Going Down
May Day
В данном случае команда uniq будет рассматривать первые три строки как повторяющиеся. Пятая строка таковой не считается, потому что не совпадает с четвертой строкой.
11.2.1. Синтаксис
Общий формат команды uniq таков:
uniq опции входной_файл выходной_файл
Ниже перечислены некоторые из ее опций:
– u Отображение только не повторяющихся строк
– d Отображение одной копии каждой повторяющейся строки
– c Удаление повторяющихся строк с выводом перед каждой из оставшихся строк
числа повторений -f n Игнорирование первых п полей; полем считается последовательность непробельных символов, завершающаяся пробелом или табуляцией
В некоторых системах опция -f не распознается, в этом случае вместо нее следует использовать опцию -n, где п — номер поля.
Давайте применим команду uniq к показанному выше файлу myfile.txt.
$ uniq myfile.txt
May Day
Going Down'
May Day
Как уже говорилось, последняя строка не считается повторяющейся. Если же выполнить над файлом команду sort -u, будут получены только две строки:
$ sort -u myfile.txt
Going Down
May Day
11.2.2. Определение количества повторений
Указав в команде uniq опцию -c, можно не только отбросить повторяющиеся строки, но и узнать, сколько раз повторяется каждая строка. В следующем примере команда uniq сообщает о том, что первая строка "May Day" встречается три раза подряд:
$ uniq -с myfile.txt
3 May Day
1 Going Down
1 May Day
11.2.3. Отображение только повторяющихся строк
Опция -d позволяет отобразить только те строки, которые встречаются несколько раз подряд:
$ uniq -d myfile.txt
Mау Day
11.2.4. Проверка уникальности отдельных полей
Команда uniq позволяет разбивать файл на поля, разделенные пробелами, с тем чтобы можно было исключать требуемые поля из процедуры проверки. Ниже показан небольшой файл, содержащий две колонки текста, причем содержимое второго поля в каждой строке одинаковое: