В Linux команда uniq
отфильтровывает повторяющиеся строки в файле, то есть она помогает обнаруживать повторяющиеся строки и удалять их.
Отфильтрованные данные утилита записывает в выходной файл.
Содержание
Синтаксис
$ uniq [ПАРАМЕТР] [ВХОД [ВЫХОД]]
Опции
- -c, --count
- Выводить число повторов в начале каждой строки
- -d, --repeated
- Выводить только повторяющиеся строки, одну для каждой группы
- -D
- Вывести все повторяющиеся строки
- --all-repeated[=МЕТОД]
- Подобно
-D
, но позволяет разделять группы пустой строкой; МЕТОД={none(default),prepend,separate} - -f, --skip-fields=N
- Не сравнивать первые N полей
- --group[=МЕТОД]
- Показать все элементы, разделяя группы пустой строкой; МЕТОД={separate(default),prepend,append,both}
- -i, --ignore-case
- Игнорировать регистр при сравнении
- -s, --skip-chars=N
- Не сравнивать первые N символов
- -u, --unique
- Выводить только неповторяющиеся строки
- -z, --zero-terminated
- Разделитель строк NUL, а не символ новой строки
- -w, --check-chars=N
- Сравнивать первые N символов строк
Полем считается последовательность пробельных символов (обычно, пробелы и/или TAB), за которой следуют непробельные символы. Сначала пропускаются поля, потом символы.
Примеры использования команды uniq в Linux
Простой пример
Содержимое исходного файла:
oleg@mobile:~/Directory:$ cat usa-states-example1.txt
Айдахо (ID)
Айдахо (ID)
Айова (IA)
Айова (IA)
Алабама (AL)
Алабама (AL)
Аляска (AK)
Аляска (AK)
Аризона (AZ)
Аризона (AZ)
Арканзас (AR)
Арканзас (AR)
oleg@mobile:~/Directory:$
Приведённый файл содержит повторяющиеся строки. Используем команду uniq
для их удаления:
oleg@mobile:~/Directory:$ uniq usa-states-example1.txt
Айдахо (ID)
Айова (IA)
Алабама (AL)
Аляска (AK)
Аризона (AZ)
Арканзас (AR)
Айдахо (ID)
Айова (IA)
Алабама (AL)
Аляска (AK)
Аризона (AZ)
Арканзас (AR)
oleg@mobile:~/Directory:$
Проверяем:
oleg@mobile:~/Directory:$ cat usa-states-example1.txt
Айдахо (ID)
Айова (IA)
Алабама (AL)
Аляска (AK)
Аризона (AZ)
Арканзас (AR)
Айдахо (ID)
Айова (IA)
Алабама (AL)
Аляска (AK)
Аризона (AZ)
Арканзас (AR)
oleg@mobile:~/Directory:$
Строки были выстроены в алфавитном порядке, но повторы не были удалены, так как для их удаления необходимо указать выходной файл. Повторяем, записывая вывод в файл usa-states-example2.txt
:
Содержимое исходного файла:
oleg@mobile:~/Directory:$ cat usa-states-example1.txt
Айдахо (ID)
Айдахо (ID)
Айова (IA)
Айова (IA)
Алабама (AL)
Алабама (AL)
Аляска (AK)
Аляска (AK)
Аризона (AZ)
Аризона (AZ)
Арканзас (AR)
Арканзас (AR)
oleg@mobile:~/Directory:$
Выполняем команду Linux uniq
с записью результата в выходной файл:
oleg@mobile:~/Directory:$ uniq usa-states-example1.txt usa-states-example2.txt
Проверяем:
oleg@mobile:~/Directory:$ cat usa-states-example2.txt
Айдахо (ID)
Айова (IA)
Алабама (AL)
Аляска (AK)
Аризона (AZ)
Арканзас (AR)
oleg@mobile:~/Directory:$
Команда Linux uniq
не обнаруживает повторяющиеся строки, если они не смежные. Вы можете сначала выполнить сортировку, или использовать sort -u
без uniq
.
Количество повторений строки
В данном случае используется опция -c
:
oleg@mobile:~/Directory:$ uniq -c usa-states-example1.txt
2 Айдахо (ID)
2 Айова (IA)
2 Алабама (AL)
2 Аляска (AK)
2 Аризона (AZ)
2 Арканзас (AR)
oleg@mobile:~/Directory:$
В начале каждой строки было выведено число её повторений.
Вывод повторяющихся строк
Для вывода лишь повторяющихся строк используется опция -D
:
oleg@mobile:~/Directory:$ uniq -D usa-states-example1.txt
Айдахо (ID)
Айдахо (ID)
Айова (IA)
Айова (IA)
Алабама (AL)
Алабама (AL)
Аляска (AK)
Аляска (AK)
Аризона (AZ)
Аризона (AZ)
Арканзас (AR)
Арканзас (AR)
oleg@mobile:~/Directory:$
Вывод уникальных строк
Для вывода строк с отстутствием дублей используется опция -u
:
oleg@mobile:~/Directory:$ uniq -u usa-states-example1.txt
oleg@mobile:~/Directory:$
Результат отрицателен, так как все строки дублированы.
Нечувствительность к регистру
Использование опции -i
позволяет сделать сравнение нечувствительным к регистру:
oleg@mobile:~/Directory:$ uniq -i usa-states-example1.txt
Айдахо (ID)
Айова (IA)
Алабама (AL)
Аляска (AK)
Аризона (AZ)
Арканзас (AR)
oleg@mobile:~/Directory:$
Заключение
В этой небольшой статье были приведены основные примеры использования в Linux команды uniq
. Из примеров можно сделать вывод, что эта утилита будет весьма полезна тем, кто занят быстрой фильтрацией информации из больших файлов, но не имеет времени на её вычитывание.