Команда Linux uniq

Опубликовано admin - вс, 09/25/2022 - 13:15

В Linux команда uniq отфильтровывает повторяющиеся строки в файле, то есть она помогает обнаруживать повторяющиеся строки и  удалять их.

Использование команды uniq в Linux с примерами

Отфильтрованные данные утилита записывает в выходной файл.

Содержание

Синтаксис

$ 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. Из примеров можно сделать вывод, что эта утилита будет весьма полезна тем, кто занят быстрой фильтрацией информации из больших файлов, но не имеет времени на её вычитывание.

Поделиться с друзьями