猿问

在一个文件中找到不在另一个文件中的行的快速方法?

在一个文件中找到不在另一个文件中的行的快速方法?

我有两个大文件(文件名集)。每个文件大约有30,000行。我试图找到一种快速查找file1中不存在于file2中的行的方法。

例如,如果这是file1:

line1
line2
line3

这是file2:

line1
line4
line5

然后我的结果/输出应该是:

line2
line3

这有效:

grep -v -f file2 file1

但是在我的大文件上使用它时非常非常慢。

我怀疑有一个很好的方法来使用diff(),但输出应该只是行,没有别的,我似乎无法找到一个开关。

任何人都可以帮我找到一个快速的方法,使用bash和基本的Linux二进制文件?

编辑:为了跟进我自己的问题,这是我到目前为止使用diff()找到的最好方法:

diff file2 file1 | grep '^>' | sed 's/^>\ //'

当然,必须有更好的方法吗?


慕运维8079593
浏览 1664回答 3
3回答

慕斯王

该通讯命令(简称“常用”)可能是有用的comm - compare two sorted files line by line#find lines only in file1comm -23 file1 file2  #find lines only in file2comm -13 file1 file2  #find lines common to both filescomm -12 file1 file2该man文件实际上非常易读。
随时随地看视频慕课网APP
我要回答