Как найти повторяющиеся строки в двух разных файлах? Юникс

Из терминала unix мы можем использовать diff file1 file2, чтобы найти разницу между двумя файлами. Есть ли аналогичная команда, чтобы показать сходство в двух файлах? (при необходимости допускается использование многих труб.

Каждый файл содержит строку с строковым предложением; они сортируются и дублируются строки, удаленные с помощью sort file1 | uniq.

file1: http://pastebin.com/taRcegVn

file2: http://pastebin.com/2fXeMrHQ

И вывод должен выводить строки, которые отображаются в обоих файлах.

output: http://pastebin.com/FnjXFshs

Я могу использовать python, чтобы сделать это как таковой, но я думаю, что это слишком много, чтобы положить в терминал:

x = set([i.strip() for i in open('wn-rb.dic')])
y = set([i.strip() for i in open('wn-s.dic')])
z = x.intersection(y)
outfile = open('reverse-diff.out')
for i in z:
  print>>outfile, i

Ответ 1

Как упоминал @tjameson, он может быть решен в другом потоке. Просто хотел бы опубликовать другое решение: sort file1 file2 | awk 'dup[$0]++ == 1'

  • обратитесь к awk guide, чтобы получить некоторый awk основы, когда значение шаблона строки истинно, эта строка будет распечатаны

  • dup [$ 0] - хеш-таблица, в которой каждый ключ является каждой строкой ввода, исходное значение равно 0 и увеличивается, как только эта строка возникает, когда он снова возникает, значение должно быть равно 1, поэтому dup[$0]++ == 1 истинно. Затем печатается эта строка.

Обратите внимание, что это работает только в том случае, если в файле нет дубликатов, как указано в вопросе.

Ответ 2

Если вы хотите получить список повторяющихся строк, не прибегая к AWK, вы можете использовать флаг -d для uniq:

sort file1 file2 | uniq -d