我想比较两个文件。文件 1.txt 文件 2.txt
文件1.txt
name1
name2
name3
文件2.txt
nameA
nameB
name1
nameC
我想使用 grep 查看这两个文件并说 name1 在两个文件中。我该怎么做呢?
尝试
grep -f file1.txt file2.txt
来自男人:
-f FILE, --file=FILE 从 FILE 中获取模式,每行一个。空文件包含零个模式,因此不匹配任何内容。(-f 由 POSIX 指定。)
使用comm(1)
:
comm -1 -2 <(sort file1.txt) <(sort file2.txt)
输出
name1
解释
`-1 -2 表示抑制第 1 列和第 2 列,只保留相交。
姓名
comm - compare two sorted files line by line
您可以使用-f
in 选项grep
将第一个文件作为“模式文件”提供,并grep
在第二个文件上执行作为实际搜索空间:
grep -f file1.txt file2.txt
分解:
grep
: 调用 grep 工具-f file1.txt
:指定file1.txt
为保存您的搜索模式的文件file2.txt
: 用于搜索空间的文件名。Set 在 python 中用于比较列表很有用。
>>> f1 = set( l.strip() for l in open('file1.txt'))
>>> f2 = set( l.strip() for l in open('file2.txt'))
>>> print "\n".join( f1 & f2)
name1
它也可以生成差异:
>>> print "\n".join( f1 - f2)
name2
name3
>>> print "\n".join( f2 - f1)
nameB
nameC
nameA
正如@Jon Clements 所建议的,如果您关心性能,请使用此表格:
f1 = set( l.strip() for l in open('file1.txt'))
common = f1.intersection(l for l in open('file2.txt'))
print "\n".join( common )
由于它不在内存中存储“file2.txt”的内容,因此内存效率更高、速度更快。
您可以使用 diff 来比较文件。
diff file1.txt file2.txt