1

我想比较两个文件。文件 1.txt 文件 2.txt

文件1.txt

name1
name2
name3

文件2.txt

nameA
nameB
name1
nameC

我想使用 grep 查看这两个文件并说 name1 在两个文件中。我该怎么做呢?

4

5 回答 5

3

尝试

grep -f file1.txt file2.txt

来自男人:

-f FILE, --file=FILE 从 FILE 中获取模式,每行一个。空文件包含零个模式,因此不匹配任何内容。(-f 由 POSIX 指定。)

于 2012-11-20T15:56:35.397 回答
1

使用comm(1)

 comm -1 -2 <(sort file1.txt) <(sort file2.txt)

输出

name1

解释

`-1 -2 表示抑制第 1 列和第 2 列,只保留相交。


姓名

    comm - compare two sorted files line by line
于 2012-11-20T15:57:05.490 回答
0

您可以使用-fin 选项grep将第一个文件作为“模式文件”提供,并grep在第二个文件上执行作为实际搜索空间:

grep -f file1.txt file2.txt

分解:

  • grep: 调用 grep 工具
  • -f file1.txt:指定file1.txt为保存您的搜索模式的文件
  • file2.txt: 用于搜索空间的文件名。
于 2012-11-20T15:57:06.393 回答
0

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”的内容,因此内存效率更高、速度更快。

于 2012-11-20T15:58:25.733 回答
0

您可以使用 diff 来比较文件。

diff file1.txt file2.txt

于 2012-11-20T15:59:00.070 回答