Как найти повторяющиеся данные в текстовом файле Linux с помощью uniq

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

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

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

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

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

Как использовать команду uniq

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

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

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

 uniq option input output

… где option – это флаг, используемый для вызова определенных методов команды, input – это текстовый файл для обработки, а output – это путь к файлу, в котором будет храниться вывод.

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

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

Мы будем использовать текстовый файл 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 . Если вы работаете с другим текстовым файлом, вы можете отсортировать его с помощью следующей команды:

 sort filename.txt > sorted.txt

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

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

 uniq duplicate.txt

Выход:

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

Подсчет повторяющихся строк

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

 uniq -c duplicate.txt

Выход:

Система отображает количество строк в текстовом файле. Вы можете видеть, что строка This is a text file встречается в файле два раза. По умолчанию команда uniq чувствительна к регистру.

Чтобы печатать только повторяющиеся строки из текстового файла, используйте флаг -D . -D означает Дубликат .

 uniq -D duplicate.txt

Система отобразит вывод следующим образом.

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

Пропуск полей при проверке дубликатов

Если вы хотите пропустить определенное количество полей при сопоставлении строк, вы можете использовать флаг -f с командой. -F означает поле .

Рассмотрим следующий текстовый файл 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

Выход:

 192.168.0.1 TCP
Linux FS

Вышеупомянутая команда пропустила первое поле (IP-адреса и имена ОС) и сопоставила второе слово (TCP и FS). Затем он отображал первое вхождение каждого совпадения в качестве вывода.

Игнорировать символы при сравнении

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

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

Чтобы игнорировать первые два символа (нумерацию списков) в файле list.txt :

 uniq -s 2 list.txt

Выход:

В выводе выше первые два символа были проигнорированы, а остальные были сопоставлены с уникальными строками.

Проверьте количество первых N символов на наличие дубликатов

Флаг -w позволяет проверять на наличие дубликатов только фиксированное количество символов. Например:

 uniq -w 2 duplicate.txt

Вышеупомянутая команда будет соответствовать только первым двум символам и будет печатать уникальные строки, если таковые имеются.

Выход:

Удалить чувствительность к регистру

Как упоминалось выше, uniq чувствителен к регистру при сопоставлении строк в файле. Чтобы игнорировать регистр символов, используйте параметр -i с командой.

 uniq -i duplicate.txt

Вы увидите следующий результат.

Обратите внимание, что в выводе выше uniq не отображал строки DO CATCH THIS и THIS IS A TEXT FILE .

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

Чтобы отправить вывод команды uniq в файл, вы можете использовать символ перенаправления вывода ( > ) следующим образом:

 uniq -i duplicate.txt > otherfile.txt

При отправке вывода в текстовый файл система не отображает вывод команды. Вы можете проверить содержимое нового файла с помощью команды cat .

 cat otherfile.txt

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

Анализ повторяющихся данных с помощью uniq

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

Работа с текстовыми файлами может быть неприятной, если вы не знаете, как фильтровать и сортировать текст в файле. Чтобы упростить вашу работу, в Linux есть несколько команд редактирования текста, таких как sed и awk, которые позволяют эффективно работать с текстовыми файлами и выводами командной строки.