我如何从两个文件中获得类似的行?

时间:2012-11-20 15:53:53

标签: python scripting grep

我想比较两个文件。 file1.txt file2.txt

FILE1.TXT

name1
name2
name3

FILE2.TXT

nameA
nameB
name1
nameC

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

5 个答案:

答案 0 :(得分:3)

尝试

grep -f file1.txt file2.txt

来自男人:

  

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

答案 1 :(得分:1)

使用comm(1)

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

<强>输出

name1

<强>说明

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


  

NAME

    comm - compare two sorted files line by line

答案 2 :(得分:0)

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

grep -f file1.txt file2.txt

故障:

  • grep:调用grep工具
  • -f file1.txt:指定file1.txt作为保存搜索模式的文件
  • file2.txt:用于搜索空间的文件名称。

答案 3 :(得分: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”的内容存储在内存中。

答案 4 :(得分:0)

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

diff file1.txt file2.txt

相关问题