18

从 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
4

2 回答 2

35

如果您想在不使用 AWK 的情况下获取重复行的列表,可以使用-dflag 到 uniq

sort file1 file2 | uniq -d
于 2014-03-03T20:27:07.800 回答
17

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

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

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

请注意,这仅在任一文件中没有重复项时才有效,如问题中所述。

于 2013-03-18T05:34:26.323 回答