Команда uniq (уникальный) — это важный инструмент для обработки текста в Linux. Она помогает фильтровать и управлять повторяющимися строками в текстовом файле, но для эффективного использования важно понимать, как она работает.
Базовое удаление дубликатов
Основная функция команды uniq — удаление повторяющихся соседних строк. Представьте, что у вас есть файл с именем reading.txt со следующим содержимым:
book
book
paper
paper
article
article
magazine
Чтобы удалить повторяющиеся строки, вы можете выполнить команду uniq:
$ uniq reading.txt
book
paper
article
magazine
Как видите, uniq выводит версию файла с удаленными повторяющимися соседними строками.
Расширенные опции фильтрации
Команда uniq также предоставляет несколько опций для более детального анализа.
Чтобы подсчитать количество вхождений каждой строки, используйте флаг -c (count):
$ uniq -c reading.txt
2 book
2 paper
2 article
1 magazine
Чтобы отобразить только те строки, которые не повторяются (т.е. уникальны), используйте флаг -u (unique):
$ uniq -u reading.txt
magazine
И наоборот, чтобы отобразить только те строки, которые повторяются, используйте флаг -d (duplicated):
$ uniq -d reading.txt
book
paper
article
Важность сортировки
Критически важная деталь команды uniq linux заключается в том, что она обнаруживает дублирующиеся строки, только если они находятся непосредственно рядом друг с другом. Если дубликаты разбросаны по файлу, uniq их не идентифицирует.
Рассмотрим эту версию reading.txt, где дубликаты не являются соседними:
book
paper
book
paper
article
magazine
article
Выполнение uniq на этом файле даст неожиданный результат:
$ uniq reading.txt
book
paper
book
paper
article
magazine
article
Ни одна строка не была удалена, потому что никакие две одинаковые строки не стояли рядом. Чтобы решить эту проблему, вы должны сначала отсортировать содержимое файла. Передавая вывод sort в uniq, вы гарантируете, что все одинаковые строки станут соседними, что позволит uniq работать правильно. Эта комбинация является мощным и распространенным шаблоном в сценариях оболочки.
$ sort reading.txt | uniq
article
book
magazine
paper
Эта команда сначала сортирует строки в алфавитном порядке, а затем uniq отфильтровывает дубликаты, предоставляя вам чистый список уникальных записей.