如何使用单词列表对单列进行 grep

如何使用单词列表对单列进行 grep

我想根据单列与单词列表的匹配从文件中提取一些行。

在 awk 中,我可以使用这样的东西:

awk '$5 == "someword" {print}' file.txt

我知道我可以像这样使用 grep :

grep -f listofwords.txt file.txt

您能告诉我如何根据文件的单列 grep 单词列表吗?

例子

A   something  something2
B   something2 something3
C   something3 something4
D   something4 something5
G   something5 something6

我想要的基于第 2 列的单词向量:

something
something4

期望的输出:

A   something  something2
D   something4 something5

答案1

对我来说,这看起来像是 awk 的常见用例:

awk 'NR == FNR { keywords[$1]=1; next; }
               { if ($2 in keywords) print; }' listofwords.txt file.txt

我们将两个文件传递给 awk;当条件“NR == FNR”为真时(记录数与当前文件中的记录数相同 - 意味着我们正在读取第一个文件),然后将关键字列表保存在“ keywords”数组并跳到下一条记录。另一个(一揽子)条件检查(file.txt 的)字段 2 是否是关键字之一;如果是这样,则打印该行。

答案2

您可以使用while循环,因为列表中的每个字符串都需要单词边界。

while read -r list; do
    grep -E "^[^ ]* +$list\>[^ ]* +.*$" input_file
done < list_file
A   something  something2
D   something4 something5

或者

$ grep -Ee '^[^ ]* +something\>[^ ]* +.*$' -e '^[^ ]* +something4[^ ]* +.*$' input_file
A   something  something2
D   something4 something5

相关内容