我想根据单列与单词列表的匹配从文件中提取一些行。
在 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