Гид по технологиям

uniq в Linux — как удалять дубликаты строк

5 min read Linux Обновлено 04 Jan 2026
uniq в Linux — удаление дубликатов строк
uniq в Linux — удаление дубликатов строк

Команда uniq в Linux — иллюстрация

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

Что такое uniq

uniq — это команда для сравнения соседних строк в текстовом потоке и вывода только уникальных (или только повторяющихся) записей. Ключевая особенность: uniq обрабатывает соседние строки, поэтому для правильной работы с неотсортированными данными её обычно комбинируют с sort.

Определение в одну строку: uniq сравнивает только соседние строки и может подсчитывать или выводить повторяющиеся записи.

Важное замечание

  • uniq по умолчанию чувствителен к регистру. Чтобы сравнения были нечувствительны к регистру, используйте опцию -i.
  • Если строки не отсортированы, предварительно применяйте sort или логическую группировку по ключу.

Синтаксис и базовое использование

Базовый синтаксис:

uniq [опции] [входной_файл] [выходной_файл]
  • опции — флаги (например, -c, -d, -i и т. д.).
  • входной_файл — файл для обработки. Если не указан, uniq читает stdin.
  • выходной_файл — необязательный параметр; чаще используют перенаправление > или pipe.

Если нужно подать на вход результат сортировки, типичная конструкция:

sort file.txt | uniq

или для записи результата в файл:

sort file.txt | uniq > unique.txt

Пример текстового файла

В примерах ниже используется файл duplicate.txt:

127.0.0.1 TCP  
127.0.0.1 UDP  
Do catch this  
DO CATCH THIS  
Don't match this  
Don't catch this  
This is a text file.  
This is a text file.  
THIS IS A TEXT FILE.  
Unique lines are really rare.  

Предположим, этот файл уже отсортирован (для корректной работы uniq).

Если файл не отсортирован, выполните:

sort filename.txt > sorted.txt

Основные примеры и опции

Удаление подряд идущих дубликатов

uniq duplicate.txt

Ожидаемый результат: команда выведет первую из каждой группы одинаковых соседних строк и пропустит последующие повторы.

Вывод уникальных строк после uniq

Подсчёт количества повторов

uniq -c duplicate.txt

Опция -c выводит перед строкой число её подряд идущих повторений.

Подсчёт повторяющихся строк с помощью uniq -c

Печать только повторяющихся строк

uniq -D duplicate.txt

Опция -D (Duplicate) выводит все строки, которые встречаются более одного раза, включая все их повторения.

Пример вывода:

This is a text file.  
This is a text file.

Пропуск полей при сравнении

Если строки состоят из полей (разделённых пробелами или табуляцией), можно пропустить N первых полей:

uniq -f 1 fields.txt

Пример файла fields.txt:

192.168.0.1 TCP  
127.0.0.1 TCP  
354.231.1.1 TCP  
Linux FS  
Windows FS  
macOS FS

Команда пропускает первое поле и сравнивает остальные поля, поэтому выводит первую уникальную комбинацию по второму полю:

192.168.0.1 TCP  
Linux FS

Пропуск символов при сравнении

Опция -s позволяет пропустить N первых символов в строке:

uniq -s 2 list.txt

Это удобно для нумерованных списков:

1. First  
2. Second  
3. Second  
4. Second  
5. Third  
6. Third  
7. Fourth  
8. Fifth

Удаление дубликатов в нумерованном списке с пропуском символов

Сравнение только первых N символов

uniq -w 2 duplicate.txt

Опция -w ограничивает сравнение первыми N символами строки.

Сравнение по первым N символам

Игнорирование регистра

uniq -i duplicate.txt

Опция -i делает сравнение нечувствительным к регистру — DO CATCH THIS и Do catch this будут считаться одинаковыми.

Игнорирование регистра при помощи uniq -i

Перенаправление вывода в файл

uniq -i duplicate.txt > otherfile.txt
cat otherfile.txt

Обратите внимание: перенаправление подавляет вывод в терминале — результат попадает в целевой файл.

Когда uniq не подойдёт

  • Если одинаковые строки распределены по файлу, но не стоят подряд, uniq без предварительного sort не удалит дубликаты.
  • Для сложных шаблонных совпадений по части строки или регулярных выражений лучше подходят awk или sed.
  • Когда нужно учитывать ключи в середине строки (множественные ключи), эффективнее использовать awk с ассоциативными массивами.

Альтернативные подходы

  • sort -u file.txt — сортирует и убирает дубликаты (полезно, когда порядок не важен).
  • awk ‘!seen[$0]++’ file.txt — сохраняет первый встретившийся вариант (сохраняет порядок без сортировки).
  • awk -F” “ ‘!seen[$2]++’ — удаление по второму полю.
  • sed ‘/^$/d’ — удалить пустые строки (подготовка данных).
  • Perl и Python — для сложной логики и нечувствительных к регистру сравнений со сложными нормализациями.

Когда выбрать что:

  • Сохранить порядок и удалить только последующие дубликаты: uniq (с предварительным sort, если нужно глобальное удаление).
  • Удалить все повторы вне зависимости от порядка: sort -u.
  • Сложные правила совпадения или нормализации: awk/Python/Perl.

Практический мини-метод для удаления дубликатов

  1. Оцените, важен ли исходный порядок строк. Если да — используйте awk.
  2. Если порядок не важен или нужна глобальная уникальность — sort -u.
  3. Если нужно сравнивать по части строки — используйте опции -f, -s или -w.
  4. Для нечувствительности к регистру применяйте -i.
  5. Всегда проверяйте результат перед перезаписью оригинального файла.

Пример рабочей последовательности:

cp data.txt data.backup
sort data.txt | uniq -c | sort -nr > duplicates_report.txt
sort data.txt | uniq > data.unique.txt

Чеклист по ролям

  • Системный администратор:

    • Сделать бэкап файла перед массовыми изменениями.
    • Использовать sort | uniq для отчистки логов.
    • Проверить влияние на скрипты, которые зависят от порядка строк.
  • Разработчик:

    • Использовать awk для удаления дубликатов по ключу.
    • Писать тесты на примерах входных данных.
  • Аналитик данных:

    • Предварительно нормализовать строки (trim, lower) перед uniq.
    • Проверить, не потеряются ли важные метаданные при агрегации.

Критерии приёмки

  • После выполнения команды в результирующем файле не должно быть подряд повторяющихся строк (если цель — их удалить).
  • При использовании опции -c сумма чисел перед строками должна равняться числу строк в исходном файле.
  • Если был выполнен бэкап, оригинал остаётся доступным.

Короткий глоссарий

  • stdin/stdout — стандартный ввод/вывод.
  • поле — фрагмент строки, разделённый пробелом или табуляцией.
  • нормализация — приведение строки к единому виду (trim, lower).

Полезные приёмы и хинты

  • Для нечувствительности к пробелам и регистру: сначала нормализуйте через sed/awk:
sed 's/^[ \t]*//;s/[ \t]*$//' file.txt | tr '[:upper:]' '[:lower:]' | sort | uniq
  • Чтобы сохранить порядок и убрать повторы (без сортировки):
awk '!seen[$0]++' file.txt > unique_preserve_order.txt
  • Быстрая отчётность по дубликатам:
sort file.txt | uniq -c | sort -nr | head -n 50

Резюме

Команда uniq полезна для быстрого удаления подряд идущих дубликатов и подсчёта повторов. Для корректной глобальной дедупликации сочетайте её с sort. Для более сложных правил используйте awk или скрипты на языке высокого уровня.

Важно: всегда делайте резервную копию оригинальных данных перед массовыми преобразованиями.

Конец статьи.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство