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

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

  • автор:

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

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

Отслеживать
68.2k 225 225 золотых знаков 80 80 серебряных знаков 223 223 бронзовых знака
задан 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

Как найти все повторяющиеся и не повторяющиеся строки в файлах

Как найти все повторяющиеся и не повторяющиеся строки в файлах

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

В Linux

Ищем НЕ ПОВТОРЯЮЩИЕСЯ строки (уникальные)

Допустим у нас есть два текстовых файла: Содержимое файла file1.txt

aaa bbb ccc ddd eee fff ggg

Содержимое файла file2.txt

bbb aaa ccc eee 111 222 ddd xxx

Для того, чтобы найти все уникальные строки в файле file1.txt (т.е. те строки, которые не содержатся в файле file2.txt) можно воспользоваться следующей командой:

cat file1.txt | grep -v -f file2.txt

Результат выполнения данной команды будет таким:

fff ggg

Как мы видим в результате выполнения данной команды выводятся только те строки, которые уникальны в файле file1.txt и которых нет в файле file2.txt Для того, чтобы найти все уникальные строки в файле file2.txt (т.е. те строки, которые не содержатся в файле file1.txt) можно воспользоваться следующей командой:

cat file2.txt | grep -v -f file1.txt

Результат выполнения данной команды будет таким:

111 222 xxx

Ищем ПОВТОРЯЮЩИЕСЯ строки (дубликаты)

Допустим у нас есть два текстовых файла:
Содержимое файла file1.txt

aaa bbb ccc ddd eee fff ggg

Содержимое файла file2.txt

bbb aaa ccc eee 111 222 ddd xxx

Для того, чтобы найти все повторяющиеся строки (дубликаты) в файлах file1.txt и file2.txt можно воспользоваться следующей командой:

cat file1.txt | grep -f file2.txt

Результат выполнения данной команды будет таким:

aaa bbb ccc ddd eee

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

Буквально сегодня на работе столкнулся с достаточно простой задачей, состоящей из двух подзадач: 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. Кто есть в твиттере — добавляйтесь 🙂

Выбрать уникальные строки

какой командой отсортировать и сохранить файл 1.txt чтоб до знака «|» были уникальные значения в строчке? символы могут быть абсолютно разные, не меняется только «|» Пример:

qwertyu>12345678|8888888 qwertyu>12345678|9999999 qwertyu>12345678|99999999 zxcvbnm>12345678|6666666 poiuytr>87654321|7777777 

Итог после кода:

qwertyu>12345678|8888888 zxcvbnm>12345678|6666666 poiuytr>87654321|7777777 

Denai
15.08.21 22:17:24 MSK
Последнее исправление: xaizek 16.08.21 01:01:33 MSK (всего исправлений: 1)

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

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