我有一个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”的位置输出最后一行。
有人可以解释一下我做错了什么吗?
非常感谢! 问候,斯文
答案 0 :(得分:1)
完整的解决方案:
awk 'NR==FNR{a[$1]; next} $1 in a' file2 file1
答案 1 :(得分:0)
当然,您可以使用awk
来做到这一点,但是您也可以尝试join
,它完全可以满足您的要求。
尝试:
join <(sort file2.txt) <(sort file1.txt)
它正在使用join和process substitution。