我有很长的关键字列表和一个单一的数据文件。我想根据提供的关键字过滤此数据文件。我怎样才能有效地做到这一点?我知道我可以使用for循环,每次使用一个关键字,并在数据文件中grep这个关键字。
foreach keyword (`cat keywords`)
grep $keyword data_raw >> data_filtered
end
我也尝试过perl管道,但效果似乎非常低效。
cat keyword | perl -ne '$a = `grep "$_" data_raw`; print $a;' > data_filtered
是否有任何有效的单行方式来完成这项工作?
答案 0 :(得分:8)
您可以使用grep -f
:
grep -f keywords data_raw
这样所有模式都将从文件keywords
中读取。
来自man grep
:
-f FILE, - file = FILE
从FILE获取模式,每行一个。空文件包含零 模式,因此没有匹配。 (-f由POSIX指定。)