uniq
Что делает команда uniq в Linux
Команда uniq в Linux используется для обработки текстовых данных и удаления повторяющихся строк в файле или потоке. Она чаще всего применяется в паре с командой sort, так как uniq обрабатывает только соседние дубликаты. Это означает, что для корректного результата данные обычно предварительно сортируют.
Пример базового использования:
sort users.txt | uniq
Эта команда выведет список уникальных строк из файла users.txt.
sort перед uniq, если строки в файле не упорядочены. Это обеспечит правильную фильтрацию дубликатов.Основные параметры команды uniq в Linux
Команда имеет несколько ключевых опций, которые позволяют гибко управлять фильтрацией и отображением строк. Ниже приведены наиболее часто используемые параметры.
Опция -c: подсчет количества повторений
Флаг -c добавляет к каждой строке число, показывающее, сколько раз она встречалась подряд.
Пример:
sort items.txt | uniq -c
Вывод может выглядеть так:
3 apple
2 banana
1 cherry
Здесь команда uniq подсчитала, сколько раз каждая строка повторялась после сортировки.
uniq -c — один из самых удобных инструментов.Опция -d: отображение только повторяющихся строк
Чтобы вывести только дубликаты, используйте опцию -d.
Пример:
sort users.txt | uniq -d
Результат покажет только те строки, которые встречаются более одного раза.
Это полезно для поиска повторяющихся записей, например, одинаковых e-mail или идентификаторов.
Опция -u: уникальные строки
Опция -u противоположна -d и показывает только те строки, которые встречаются один раз.
Пример:
sort names.txt | uniq -u
Так можно быстро выделить уникальные элементы, отсутствующие в дубликатах.
Опция -f N: пропуск N полей перед сравнением
Флаг -f позволяет пропустить определенное количество полей перед сравнением строк. Полем считается последовательность символов, разделённых пробелами.
Пример:
sort data.txt | uniq -f 1
Здесь команда сравнивает строки, игнорируя первое поле. Это удобно, когда первые колонки содержат, например, дату или идентификатор, а уникальность нужно проверять по содержимому.
Опция -s N: пропуск N символов
Флаг -s (skip characters) позволяет игнорировать первые N символов строки при сравнении.
Пример:
sort logs.txt | uniq -s 10
В этом случае сравнение начинается с 11-го символа каждой строки. Такой подход часто используется при анализе логов, где первые символы содержат временные метки.
Опция -w N: ограничение длины сравнения
С помощью -w можно задать длину фрагмента строки, который будет участвовать в сравнении.
Пример:
sort codes.txt | uniq -w 5
Команда сравнивает только первые 5 символов каждой строки. Это полезно, когда важна только часть строки (например, префикс кода).
Примеры практического использования команды uniq в Linux
Фильтрация списка пользователей
Допустим, в файле users.txt содержатся имена пользователей, некоторые из которых повторяются. Чтобы вывести только уникальные имена:
sort users.txt | uniq
А чтобы посчитать, сколько раз встречается каждое имя:
sort users.txt | uniq -c | sort -nr
Здесь sort -nr сортирует результат по числу повторений — от большего к меньшему.
Анализ логов
Если нужно определить количество уникальных IP-адресов, встречающихся в логе:
awk '{print $1}' access.log | sort | uniq | wc -l
Команда awk извлекает первый столбец (IP-адреса), sort сортирует их, uniq удаляет дубликаты, а wc -l считает количество строк — то есть число уникальных IP.
Чтобы найти повторяющиеся IP, используйте:
awk '{print $1}' access.log | sort | uniq -d
Сравнение списков и фильтрация данных
Иногда нужно найти различия между двумя списками. Например:
cat list1.txt list2.txt | sort | uniq -u
Команда объединяет два файла, сортирует строки и выводит только те, что встречаются один раз (то есть уникальные для каждого файла).
Полезные комбинации с другими командами
Команда uniq в Linux часто используется вместе с другими утилитами:
sort— для предварительной сортировки данных;awkилиcut— для выборки конкретных столбцов перед фильтрацией;wc -l— для подсчета количества уникальных строк;grep— для поиска по уникальному списку.
Пример сочетания:
grep "ERROR" syslog | sort | uniq -c | sort -nr | head
Эта цепочка покажет наиболее часто встречающиеся ошибки в системных логах.
Рекомендации по работе с uniq
- Оптимизация производительности: при работе с большими файлами используйте пайпы (
|) и перенаправление вывода, чтобы не создавать временные файлы. - Проверка корректности: если результат команды
uniqвыглядит неполным, проверьте, была ли выполнена сортировка. Без нее часть дубликатов может остаться незамеченной. - Совет: используйте
uniq -ci(без учета регистра) для анализа текстов, где возможны различия в регистре символов.
Команда uniq в Linux — это один из базовых инструментов текстовой обработки, незаменимый для анализа данных, логов и списков. Правильное понимание её параметров и сочетаний с другими утилитами делает работу в консоли более эффективной и быстрой.