【问题标题】:How to grep a long list of keywords without a loop如何在没有循环的情况下grep一长串关键字
【发布时间】:2023-04-04 06:52:01
【问题描述】:

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

有没有一种高效的单线方式来完成这项工作?

【问题讨论】:

  • 输出的顺序重要吗?最有效的解决方案是同时查找所有关键字(到目前为止,两个答案都是这样做的),而您的输出将按输入文件中的单词排序,如果一行匹配多个关键字,则包含重复项。如果这就是您真正想要的东西,您可能需要进行编辑以阐明您的要求。

标签: perl shell grep


【解决方案1】:

您可以为此使用grep -f

grep -f keywords data_raw

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

来自man grep

-f 文件,--file=文件

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 2015-11-15
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    相关资源
    最近更新 更多