Как найти уникальную строку в файле linux
Перейти к содержимому

Как найти уникальную строку в файле linux

  • автор:

COREUTILS. Команда uniq. Вывод уникального содержимого

Общий синтаксис программы uniq в linux предельно простой:

unic [OPTIONS] [INPUT [OUTPUT]]

Тоесть, чтобы вывести уникальные строки, например в тестовом файле my_text_file, нужно команде uniq передать его имя в качестве аргумента

Нельзя, разумеется, забывать, что вы должны находится именно в той дирректории, где и лежит файл my_text_file. Иначе uniq необходимо передать полный путь до файла в linux:

Неуникальные строки можно посчитать. Для этого передайте quic в качестве опции ключ «-c».

unic -c /home/user/my_text_file

В выводе вы получите таблицу из 2-х колонок, в первой будет указано количество повторяющихся строк, во второй их значение.

В linux uniq также можно попросить печатать только те строки, которые имеют дубликаты, для этого нужно использовать ключ «-d»:

uniq -d /home/user/my_text_file

Опции можно комбинировать, и чтобы посчитать только строки которые имеют дубликаты, следует ввести такую команду:

uniq -d -с /home/user/my_text_file

В противовес ключу «-d» есть ключ «-u», заставляющий uniq выводить только строки, не имеющие дубликата:

uniq -u /home/user/my_text_file

Однако, как мы и освещали в вводой части, uniq работает только последовательно, следовательно строки, содержащиеся в файле, например:

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

sort -n my_text_file | uniq

или же просто использовать sort с ключом «-u»

sort -n -u my_text_file

Возможности и примеры использования утилиты sort мы уже освещали в статье COREUTILS. Команда sort. Сортировка вывода программ

uniq: команда Linux для поиска повторяющегося текста

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

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

Что ж, прежде всего, давайте посмотрим на пример, чтобы понять основы команды uniq и что она делает, а что нет. За пример, представьте, что вы создаете текстовый файл с именем test.txt, а внутри вы помещаете несколько повторяющихся фраз или слов, например повторяющиеся три строки «привет это тест» и затем используйте с ним uniq:

nano prueba.txt uniq prueba.txt

Ну, в таком случае, вывод команды будет просто:

Salida: Hola, esto es una prueba

То есть поставить одну строчку «привет это тест» исключая другие 2, которые совпадают. Но будьте осторожны, если вы снова используете cat, чтобы увидеть оригинал, вы увидите, что они не были удалены из файла, он просто удалил их из вывода:

cat prueba.txt

чей вывод будет:

Hola, esto es una prueba Hola, esto es una prueba Hola, esto es una prueba

Но команда uniq имеет гораздо больше доступных опций. Например, он может сказать вам сколько раз повторяется строка, указав в начале строки количество повторений. Для этого:

uniq -c prueba.txt

Вы также можете просто печатать повторяющиеся строки, и игнорировать неповторяющиеся:

uniq -d prueba.txt

Или те, которые не дублируются с опцией -u:

uniq -u prueba.txt

Использовать с учетом регистра и быть чувствительным к регистру, вы можете использовать опцию -i:

uniq -i prueba.txt

Хорошо, и как это можно было сделать, чтобы создать файл только с уникальными строками, удаляя все дубликаты сразу. Что ж, это так же просто, как использовать канал для передачи вывода uniq в новый текстовый файл:

uniq prueba.txt > unicas.txt

Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.

Полный путь к статье: Любители Linux » GNU / Linux » Системное администрирование » uniq: команда Linux для поиска повторяющегося текста

Будьте первым, чтобы комментировать

Вывести уникальные неповторяющиеся строки

Нужно сравнить два файла и вывести только уникальные строки, т.е. только три последние строки из второго файла. Перебрал уже множество утилит типа sort comm diff uniq и не одна не предоставила требуемый результат.

Отслеживать
67.9k 216 216 золотых знаков 77 77 серебряных знаков 219 219 бронзовых знаков
задан 21 сен 2018 в 15:35
13 1 1 серебряный знак 5 5 бронзовых знаков
А 1 и 2 это не уникальные строки? Их ведь нет во втором файле.
21 сен 2018 в 16:48
Судя по задаче нужны строки из второго файла которых нет в первом
21 сен 2018 в 16:50
diff не помог?
21 сен 2018 в 23:43
@de_frag думаю вопрос поставлен не корректно поэтому автор путается.
21 сен 2018 в 23:50

4 ответа 4

Сортировка: Сброс на вариант по умолчанию

Нужно сравнить два файла и вывести только уникальные строки, т.е. только три последние строки из второго файла.

первая часть предложения противоречит второй. уникальных строк будет пять (включая две первые строки из первого файла).

просто уникальные строки (первая часть предложения):

$ sort -u файл1 файл2 

уникальные строки только из второго файла (вторая часть предложения):

$ comm -1 -3 файл1 файл2 

опция -1 исключит уникальные для первого файла строки, опция -3 — общие для двух файлов строки. для корректной работы программы comm файлы должны быть отсортированы.

  • $ info sort (если установлена программа info) или $ man sort
  • $ info comm (если установлена программа info) или $ man comm

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

Буквально сегодня на работе столкнулся с достаточно простой задачей, состоящей из двух подзадач: 1) нужно было подсчитать в текстовом файле количество уникальных строк 2) подсчитать в уже другом файле количество строк, которые дублируются. С этими задачами я справился и после этого подумал — почему бы не написать небольшой пост, вдруг кому-нибудь пригодится.

Например, у нас имеется текстовый файл с именем data.txt:

Elena 176 60
Egor 181 80
Victor 190 85
Jane 167 56
Egor 181 80
Jeff 191 90
Lena 176 60
Kate 180 65
Egor 181 80
Jane 167 56
Egor 181 80

Подсчитаем в нём количество уникальных строк с помощью следующей команды:

$ sort data.txt | uniq -u | wc -l

Всё достаточно просто. Утилита uniq с опцией -u выводит на экран уникальные строки (u — unique, видимо так) и с помощью | результат перенаправляется в утилиту wc , которая просто считает количество строк, т.к. исполняется с опцией -l. В самом начале нам необходимо отсортировать входной поток данных (текстовый файл), иначе утилита uniq не сможет верно подсчитать уникальные строки. Выполняется сортировка с помощью sort и результат, используя |, перенаправляется в uniq. После выполнения такой команды для файла data.txt на экран будет выведено число 5.

Для того чтобы решить вторую подзадачу, сделаем всё тоже самое, только uniq будет выполнен с опцией -d (видимо d — duplicate):

$ sort data.txt | uniq -d | wc -l

В результате на экран выведено число 2. Обе подзадачи решены достаточно простым способом. Записал небольшую демонстрацию кому интересно.

P. S. Кто есть в твиттере — добавляйтесь 🙂

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *