如何在2个不同的文件中找到重复的行?Unix的

alv*_*vas 12 unix diff file similarity

从unix终端,我们可以diff file1 file2用来查找两个文件之间的区别.是否有类似的命令来显示2个文件的相似性?(必要时允许许多管道.

每个文件都包含一个带有字符串句子的行; 它们被排序并删除重复的行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
Run Code Online (Sandbox Code Playgroud)

Nar*_*lei 29

如果你想获得重复行的列表而不诉诸AWK,你可以使用-dflag来uniq:

sort file1 file2 | uniq -d
Run Code Online (Sandbox Code Playgroud)


小智 13

正如@tjameson所说,它可以在另一个线程中解决.只是想发布另一个解决方案: sort file1 file2 | awk 'dup[$0]++ == 1'

  1. 参考awk指南获取一些awk基础知识,当一行的模式值为true时,将打印此行

  2. dup [$ 0]是一个哈希表,其中每个键都是输入的每一行,原始值为0并且一旦该行发生就递增,当它再次出现时,值应为1,所以dup[$0]++ == 1为真.然后打印这一行.

请注意,这仅在任一文件中没有重复项时才有效,如问题中指定的那样.