如何在没有循环的情况下grep很长的关键字列表

时间:2013-11-04 16:16:20

标签: perl shell grep

我有很长的关键字列表和一个单一的数据文件。我想根据提供的关键字过滤此数据文件。我怎样才能有效地做到这一点?我知道我可以使用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

是否有任何有效的单行方式来完成这项工作?

1 个答案:

答案 0 :(得分:8)

您可以使用grep -f

grep -f keywords data_raw

这样所有模式都将从文件keywords中读取。

来自man grep

  

-f FILE, - file = FILE

     

从FILE获取模式,每行一个。空文件包含零   模式,因此没有匹配。 (-f由POSIX指定。)