найти похожие строки в текстовом файле в системе Unix - PullRequest
0 голосов
/ 26 мая 2019

У меня есть файл с именем tt.txt, и содержимое этого файла выглядит следующим образом:

fdgs
jhds
fdgs

Я пытаюсь получить строку, аналогичную выводу в текстовом файле.

мой ожидаемый вывод:

fdgs
fdgs

, чтобы сделать это, я использовал эту команду:

uniq -u tt.txt > output.txt

, но она возвращает:

fdgs
jhds
fdgs

Вы знаете, как это исправить?

Ответы [ 2 ]

1 голос
/ 27 мая 2019

Один в awk:

$ awk '++seen[$0]==2;seen[$0]>1' file
fdgs
fdgs
1 голос
/ 26 мая 2019

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

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

sort tt.txt |uniq -D

Если вы хотите, чтобы вывод был в том же порядке, вам нужно запомнить номер строки ввода и снова отсортировать номер строки следующим образом

cat -n tt.txt |сортировка -k 2 |uniq -f 1 -D |сортировать -k 1,1 |sed 's / \ s + [0-9] + \ s + //'

  • cat -n напечатает содержимое с номером строки
  • sort -k 2будет сортировать ввод, начиная со 2-го столбца
  • uniq -f 1 проигнорирует первый столбец
  • sort -k1,1 отсортирует вывод обратно по исходному номеру строки
  • sed 's / \ s + [0-9] + \ s + //' удалит первый столбец с номером строки

Команда uniq -u выведет только уникальную строку ввода, которая полностьюнапротив того, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...