我有一个文件,其中某一列包含特定数字,我想从另一个文件中提取第 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