grep -vf对大文件来说太慢了

use*_*037 4 bash shell performance awk grep

我正在尝试使用存储在文件filter.txt中的模式从data.txt过滤数据.如下,

grep -v -f filter.txt data.txt > op.txt
Run Code Online (Sandbox Code Playgroud)

对于filter.txt中的30-40K行和data.txt中的~300K行,这个grep需要10-15分钟.

有没有办法加快这个?

data.txt中

data1
data2
data3
Run Code Online (Sandbox Code Playgroud)

filter.txt

data1
Run Code Online (Sandbox Code Playgroud)

op.txt

data2
data3
Run Code Online (Sandbox Code Playgroud)

这适用于codeforester提供的解决方案,但是当filter.txt为空时失败.

cod*_*ter 6

基于Inian相关帖子中解决方案,此awk命令应解决您的问题:

awk 'FNR==NR {hash[$0]; next} !($0 in hash)' filter.txt data.txt > op.txt
Run Code Online (Sandbox Code Playgroud)