Как найти повторяющиеся строки в двух разных файлах? Юникс
Из терминала 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