使用awk比较两个文件的命令仅返回每次匹配的最后一行

时间:2020-07-20 17:16:35

标签: bash awk git-bash

我有一个bash命令$ awk 'NR==FNR {a[$1]=$0;}; $1 in a {print a[$1]}' file1 file2 > outputfile

文件1 的结构如下:

'resource/Autism' 'type' 'owl#Thing' .  
'resource/Alabama' 'type' 'AdministrativeArea' .  
'resource/Alabama' 'type' 'Region' .  

文件2 的结构如下:

'resource/Alabama'  
'resource/Abert_Einstein'  
'resource/Autism'

我现在希望我的命令将“ file2”中的条目与“ file1”第一列中的条目进行比较,如果匹配,则在“ outputfile”中打印“ file1”的整行。 例如,如果我在“ file2”中包含“ resource / Alabama”行,则应该在第一列等于“ resource / Alabama”的情况下打印“ file1”的每一行。 但是,我的命令仅在找到“ resource / Alabama”的位置输出最后一行。

有人可以解释一下我做错了什么吗?

非常感谢! 问候,斯文

2 个答案:

答案 0 :(得分:1)

完整的解决方案:

awk 'NR==FNR{a[$1]; next} $1 in a' file2 file1

答案 1 :(得分:0)

当然,您可以使用awk来做到这一点,但是您也可以尝试join,它完全可以满足您的要求。

尝试:

join <(sort file2.txt) <(sort file1.txt)

它正在使用joinprocess substitution