Grep 行中特定列中文件中的特定单词

Grep 行中特定列中文件中的特定单词

我有一个文件,其中某一列包含特定数字,我想从另一个文件中提取第 3 列中包含这些数字的行。

例如,我有extract.file

123
689
456

input.file

1 AB 123 home 123
1 AC 568 cat 568
1 BC 689 dog 123
1 BB 456 car 456

我想要一个结果文件,其中仅包含:

1 AB 123 home 
1 BC 689 dog
1 BB 456 car

我用了

grep -wF -f extract.file input.file > output.file

但这也包括最后一栏:

1 BC 689 dog 123

那么如何只在第 3 列中搜索并从输出中排除最后一列呢?

答案1

单程:

awk 'NR==FNR{a[$1];next}($3 in a){$NF="";print;}' extract.file input.file

要获取整行而不删除最后一列:

awk 'NR==FNR{a[$1];next}($3 in a)' extract.file input.file

答案2

在模式文件中使用正则表达式:

[0-9]\+ [A-Z]\+ 123
[0-9]\+ [A-Z]\+ 689
[0-9]\+ [A-Z]\+ 456


grep -f   extract.file input.file
1 AB 123 home 123
1 BC 689 dog 123
1 BB 456 car 456

答案3

你可以使用cut

grep -wF -f extract.file input.file | cut -d" "  -f1,2,3,4  >  output.file

相关内容