uniq

Что делает команда uniq в Linux

Команда uniq в Linux используется для обработки текстовых данных и удаления повторяющихся строк в файле или потоке. Она чаще всего применяется в паре с командой sort, так как uniq обрабатывает только соседние дубликаты. Это означает, что для корректного результата данные обычно предварительно сортируют.

Пример базового использования:

Bash
sort users.txt | uniq

Эта команда выведет список уникальных строк из файла users.txt.

Совет: всегда применяйте sort перед uniq, если строки в файле не упорядочены. Это обеспечит правильную фильтрацию дубликатов.

Основные параметры команды uniq в Linux

Команда имеет несколько ключевых опций, которые позволяют гибко управлять фильтрацией и отображением строк. Ниже приведены наиболее часто используемые параметры.

Опция -c: подсчет количества повторений

Флаг -c добавляет к каждой строке число, показывающее, сколько раз она встречалась подряд.

Пример:

Bash
sort items.txt | uniq -c

Вывод может выглядеть так:

Bash
3 apple
2 banana
1 cherry

Здесь команда uniq подсчитала, сколько раз каждая строка повторялась после сортировки.

Совет: если вы анализируете логи или частоту встречаемости данных, uniq -c — один из самых удобных инструментов.

Опция -d: отображение только повторяющихся строк

Чтобы вывести только дубликаты, используйте опцию -d.

Пример:

Bash
sort users.txt | uniq -d

Результат покажет только те строки, которые встречаются более одного раза.

Это полезно для поиска повторяющихся записей, например, одинаковых e-mail или идентификаторов.

Опция -u: уникальные строки

Опция -u противоположна -d и показывает только те строки, которые встречаются один раз.

Пример:

Bash
sort names.txt | uniq -u

Так можно быстро выделить уникальные элементы, отсутствующие в дубликатах.

Опция -f N: пропуск N полей перед сравнением

Флаг -f позволяет пропустить определенное количество полей перед сравнением строк. Полем считается последовательность символов, разделённых пробелами.

Пример:

Bash
sort data.txt | uniq -f 1

Здесь команда сравнивает строки, игнорируя первое поле. Это удобно, когда первые колонки содержат, например, дату или идентификатор, а уникальность нужно проверять по содержимому.

Опция -s N: пропуск N символов

Флаг -s (skip characters) позволяет игнорировать первые N символов строки при сравнении.

Пример:

Bash
sort logs.txt | uniq -s 10

В этом случае сравнение начинается с 11-го символа каждой строки. Такой подход часто используется при анализе логов, где первые символы содержат временные метки.

Опция -w N: ограничение длины сравнения

С помощью -w можно задать длину фрагмента строки, который будет участвовать в сравнении.

Пример:

Bash
sort codes.txt | uniq -w 5

Команда сравнивает только первые 5 символов каждой строки. Это полезно, когда важна только часть строки (например, префикс кода).

Примеры практического использования команды uniq в Linux

Фильтрация списка пользователей

Допустим, в файле users.txt содержатся имена пользователей, некоторые из которых повторяются. Чтобы вывести только уникальные имена:

Bash
sort users.txt | uniq

А чтобы посчитать, сколько раз встречается каждое имя:

Bash
sort users.txt | uniq -c | sort -nr

Здесь sort -nr сортирует результат по числу повторений — от большего к меньшему.

Анализ логов

Если нужно определить количество уникальных IP-адресов, встречающихся в логе:

Bash
awk '{print $1}' access.log | sort | uniq | wc -l

Команда awk извлекает первый столбец (IP-адреса), sort сортирует их, uniq удаляет дубликаты, а wc -l считает количество строк — то есть число уникальных IP.

Чтобы найти повторяющиеся IP, используйте:

Bash
awk '{print $1}' access.log | sort | uniq -d

Сравнение списков и фильтрация данных

Иногда нужно найти различия между двумя списками. Например:

Bash
cat list1.txt list2.txt | sort | uniq -u

Команда объединяет два файла, сортирует строки и выводит только те, что встречаются один раз (то есть уникальные для каждого файла).

Полезные комбинации с другими командами

Команда uniq в Linux часто используется вместе с другими утилитами:

  • sort — для предварительной сортировки данных;
  • awk или cut — для выборки конкретных столбцов перед фильтрацией;
  • wc -l — для подсчета количества уникальных строк;
  • grep — для поиска по уникальному списку.

Пример сочетания:

Bash
grep "ERROR" syslog | sort | uniq -c | sort -nr | head

Эта цепочка покажет наиболее часто встречающиеся ошибки в системных логах.

Рекомендации по работе с uniq

  1. Оптимизация производительности: при работе с большими файлами используйте пайпы (|) и перенаправление вывода, чтобы не создавать временные файлы.
  2. Проверка корректности: если результат команды uniq выглядит неполным, проверьте, была ли выполнена сортировка. Без нее часть дубликатов может остаться незамеченной.
  3. Совет: используйте uniq -ci (без учета регистра) для анализа текстов, где возможны различия в регистре символов.

Команда uniq в Linux — это один из базовых инструментов текстовой обработки, незаменимый для анализа данных, логов и списков. Правильное понимание её параметров и сочетаний с другими утилитами делает работу в консоли более эффективной и быстрой.