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

时间:2013-03-18 05:25:04

标签: file unix diff similarity

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

每个文件都包含一个带有字符串句子的行;对它们进行排序,并使用sort file1 | uniq删除重复的行。

file1http://pastebin.com/taRcegVn

file2http://pastebin.com/2fXeMrHQ

输出应该输出两个文件中出现的行。

outputhttp://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

2 个答案:

答案 0 :(得分:28)

如果您想获得重复行的列表而不诉诸AWK,可以使用-d flag to uniq

sort file1 file2 | uniq -d

答案 1 :(得分:12)

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

  1. 请参考awk guide获取一些awk 基础知识,当一行的模式值为真时,此行将为 印刷

  2. dup [$ 0]是一个哈希表,其中每个键都是输入的每一行, 原始值为0,一旦出现此行,则递增 它再次出现,值应为1,因此dup[$0]++ == 1为真。 然后打印这一行。

  3. 请注意,这仅适用于任一文件中没有重复项的情况,如问题中指定的那样。