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

Как использовать uniq в Linux — полное руководство

• 6 min read • Linux • Обновлено 29 Nov 2025
Как использовать uniq в Linux — руководство
Как использовать uniq в Linux — руководство

Команда uniq в Linux, пример вывода

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

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

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

Важно: uniq работает только с соседними строками. Если одинаковые строки не идут подряд, сначала выполните sort или используйте другие инструменты.

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

uniq [опции] [входной_файл] [выходной_файл]
  • опции — флаги управления поведением команды
  • входной_файл — файл для обработки; если не указан, uniq читает stdin
  • выходной_файл — необязателен; можно перенаправить вывод через > или использовать конвейеры

Примеры ниже используют обычный shell и стандартные утилиты GNU coreutils. Если у вас другая реализация (например, BusyBox), набор опций может отличаться.

Пример входного файла

Файл 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.

Если вход не отсортирован, сначала выполните:

sort filename.txt > sorted.txt

или используйте конвейер: sort filename.txt | uniq

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

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

uniq duplicate.txt

Вывод не изменяет исходный файл. Чтобы сохранить результат, перенаправьте вывод:

uniq duplicate.txt > unique.txt

Или в конвейере:

sort duplicate.txt | uniq > unique_sorted.txt

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

Подсчёт повторов

Флаг -c показывает количество подряд идущих одинаковых строк:

uniq -c duplicate.txt

Этот вывод полезен для подсчёта агрегированных значений после сортировки.

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

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

Флаг -D выводит все строки, которые имеют повтор (включая каждую из повторяющихся копий). Это удобно для инспекции дубликатов перед их удалением:

uniq -D duplicate.txt

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

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

Пропустить поля при сравнении

Флаг -f N пропускает N полей (разделённых пробелами или табуляцией) при сравнении строк. Пример файла fields.txt:

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

Команда, которая игнорирует первое поле:

uniq -f 1 fields.txt

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

Пропустить символы при сравнении

Флаг -s N пропускает N символов (от начала строки) при сравнении. Это полезно для нумерованных списков:

1. First
2. Second
3. Second
4. Second
5. Third
6. Third
7. Fourth
8. Fifth
uniq -s 2 list.txt

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

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

Флаг -w N ограничивает сравнение первыми N символами строки:

uniq -w 2 duplicate.txt

Сопоставление по первым символам с uniq -w

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

Флаг -i делает сравнение нечувствительным к регистру:

uniq -i duplicate.txt

Игнорирование регистра с флагом -i

Заметьте: при использовании -i строки “DO CATCH THIS” и “Do catch this” будут считаться одинаковыми.

Отправить вывод в файл

Перенаправление стандартно:

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

Если нужен атомарный перезапись исходного файла, используйте sponge (от moreutils) или временный файл:

sort duplicate.txt | uniq > tmp && mv tmp duplicate.txt
# или
sort duplicate.txt | uniq | sponge duplicate.txt

Важно: непосредственная запись через > на тот же файл, который читает команда, приведёт к потере данных.

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

  • sed: можно удалить дубликаты с помощью sed-скрипта, особенно если порядок важен и нужно сохранять первую встречу строки.
  • awk: гибкий инструмент для подсчёта, фильтрации и вывода уникальных строк без сортировки; позволяет хранить 상태 в ассоциативном массиве.
  • sort -u: когда вам нужны уникальные строки по всему файлу и порядок не важен, sort -u быстрее и короче.

Примеры:

Удаление дубликатов без сортировки, сохранив первую встречу, с awk:

awk '!seen[$0]++' file.txt > unique_preserve_order.txt

Удаление дубликатов по ключевому полю с awk (например, второе поле):

awk '!seen[$2]++' file.txt

Использование sort -u:

sort -u file.txt > unique.txt

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

Типичные ошибки и когда uniq не сработает

  • Неотсортированный вход: uniq не обнаружит дубликаты, если одинаковые строки не идут подряд.
  • Различия в пробелах или невидимых символах: строки с разными пробелами считаются разными.
  • Кодировки: различие кодировок или невидимые символы (UTF-8 BOM) могут мешать совпадениям.

Проверяйте файл через od -c или cat -A, если поведение неожиданное.

Методология работы с дубликатами — краткий чеклист

  1. Оцените, надо ли сохранять исходный порядок.
  2. Если порядок не важен — используйте sort -u.
  3. Если порядок важен — используйте awk ‘!seen[$0]++’ или sort с ключом и последующим восстановлением порядка.
  4. Перед массовыми правками создайте резервную копию файла.
  5. Тестируйте на небольшом образце.

Справочная таблица по опциям

ОпцияЧто делаетПример
-cПоказать количество подряд идущих повторовuniq -c file.txt
-dВывести только повторяющиеся строкиuniq -d file.txt
-DВывести все копии повторяющихся строкuniq -D file.txt
-iИгнорировать регистрuniq -i file.txt
-f NПропустить N полей перед сравнениемuniq -f 1 file.txt
-s NПропустить N символов перед сравнениемuniq -s 2 file.txt
-w NСравнивать только первые N символовuniq -w 5 file.txt

Шпаргалка для разных ролей

  • Системный администратор:
    • Часто сортируйте вывод конфигураций и используйтe uniq -c для поиска повторов в списках. Создавайте резервные копии.
  • Разработчик:
    • Для логов применяйте awk и uniq совместно, чтобы аггрегировать и подсчитать события.
  • Аналитик данных:
    • Используйте sort -u для очистки набора данных перед загрузкой. Для сохранения порядка применяйте awk.

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

  • Входной файл обработан без потери нужных данных.
  • Дубликаты удалены в соответствии с требованием (по всему файлу или только соседние).
  • Проверены кейсы с регистром и пробелами.

Мини-методология очистки файла от дубликатов

  1. Сделать резервную копию: cp file.txt file.txt.bak
  2. Протестировать на части файла: head -n 200 file.txt | sort | uniq -c
  3. Выполнить полную обработку: sort file.txt | uniq > file.clean.txt
  4. Сравнить: diff file.txt.bak file.clean.txt или проверить контрольные суммы
  5. Подменить файл, если результат соответствует ожиданиям

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

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

Примеры тестов и критерии приёмки

  • Тест 1: Файл с повторяющимися строками подряд. Ожидается, что uniq удалит все подряд идущие дубликаты.
  • Тест 2: Файл с одинаковыми строками, не подряд. Ожидается, что uniq без сортировки ничего не изменит.
  • Тест 3: Файл с различиями в регистре. Ожидается, что uniq -i сочтёт такие строки одинаковыми.

Часто задаваемые вопросы

Когда лучше использовать awk вместо uniq?

Если нужно сохранять исходный порядок и удалять все повторные вхождения по всему файлу, используйте awk: awk ‘!seen[$0]++’ file.txt. uniq работает только с соседними строками.

Можно ли исправить файл на месте?

Непрямое исправление на месте безопаснее: используйте временный файл и mv, либо sponge для атомарной перезаписи.

Что делать с невидимыми символами?

Проверяйте файл через cat -A или od -c, удаляйте лишние пробелы с помощью sed ‘s/[ \t]*$//‘ или iconv для проблем кодировок.

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

Итог

uniq — простой и быстрый инструмент для работы с подряд идущими дублирующими строками. В связке с sort и awk он покрывает большинство задач по очистке текстовых данных. Выбирайте инструмент по задаче: sort -u для глобальной дедупликации, awk для сохранения порядка, uniq для простых случаев и подсчёта повторов.

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

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро