next up previous contents
Next: 7.18 comm - сравнить Up: 7. Программы преобразования и Previous: 7.16 sort - сортировать

7.17 uniq - вывод только уникальных строк

Ипользование программы:
uniq [option] [input [output]]
По умолчанию, программа uniq читает вводной поток, который предположительно является отсортированным в каком-то смысле (по алфавиту или в соответствии с числовыми значениями). Если встречаются одинаковые строки, то программа удаляет повторения, оставляя лишь по одной строке из любого количества повторяющихся строк. Однако возможны варианты (смотрите ниже описание параметров программы uniq). В данном разделе обсуждается тот вариант программы который отвечает на команду
uniq -version
строкой
SPMquotuniq (GNU textutils) 1.22".

Вводной поток должен быть отсортирован. Если не определ©н параметр output, то вывод производится на стндартное устройство вывода. Если параметр output, то вывод производится в файл с именем output.

Программа воспринимает следующие параметры.

-n
-f n
-skip-fields=n
Пропустить n полей в каждой строке вводного файла до проверки на уникальность. Поле вводной записи является последовательность символов, которая не содержит внутри себя пробелов или знаков табуляции <TAB>. Одно поле отделяется от другого одним или более знаками пробела или табуляции <TAB>.

+n
-s n
-skip-chars=n
Пропустить n символов до проверки на уникальность. Если используется пропуск сразу двух вещей: пропуск полей и пропуск символов, то вначале выполняется пропуск полей, а потом пропуск символов.

-c
-count
Вывести число раз, которое каждая строка встретилась во вводном файле.

-i
-ignore-case
Игнорировать регистр, в котором представлены символы во входном файле.

-d
-repeated
Вывести только повторяющиеся строки.

-u
-unique
Напечатать только уникальные строки (не повторяющиеся).

-w n
-check-chars=n
Сравнивать только n символов в каждой строке (после пропуска полей и символов). По умолчанию, после пропуска полей и символов, если таковые имели место, сравнивается остаток строки целиком.

Рассмотрим несколько простых примеров. Пусть у нас═имеется тестовый файл с именем T, который содержит нижеследующее:

12311 aabcd
45611 dc09
78911 wigs
21311 anka
32211 after
98722 gens

Тогда команда
uniq -c T
даст

      1 12311 aabcd
      1 45611 dc09
      1 78911 wigs
      1 21311 anka
      1 32211 after
      1 98722 gens
Что совершенно неудивительно, ведь входной файл не отсортирован. Но если применить команду
uniq +3 -w 2 -c T
то получим результат
      5 12311 aabcd
      1 98722 gens
т.е. программа найд©т повторяющиеся части строк. Мы можем использовать команду
uniq -1 -w 2 -c T
и увидим, что программа пропустила только первое поле, но не пробел после него
SPMquot 6 12311 aabcd"
но если учесть это явление
uniq -1 +1 -w 1 -c T
то получим, что ожидалось
      1 12311 aabcd
      1 45611 dc09
      1 78911 wigs
      2 21311 anka
      1 98722 gens


next up previous contents
Next: 7.18 comm - сравнить Up: 7. Программы преобразования и Previous: 7.16 sort - сортировать
Andrei Chevel
Andrei.Chevel@pnpi.spb.ru