Bash awk中的Vlookup:如何在输出的末尾列出文件2中发生但文件1中没有发生的任何事情?

Bash awk中的Vlookup:如何在输出的末尾列出文件2中发生但文件1中没有发生的任何事情?,bash,unix,awk,Bash,Unix,Awk,我有两个文件,文件1: 1 800 800 0.51 2 801 801 0.01 3 802 802 0.01 4 803 803 0.23 和文件2: 1 800 800 0.55 2 801 801 0.09 3 802 802 0.88 4 804 804 0.24 我有一个awk脚本,它在第二个文件中查找与第

我有两个文件,文件1:

1    800     800     0.51
2    801     801     0.01
3    802     802     0.01
4    803     803     0.23
和文件2:

1    800     800     0.55
2    801     801     0.09
3    802     802     0.88
4    804     804     0.24
我有一个awk脚本,它在第二个文件中查找与第一个文件的前三列匹配的值

$ awk 'NR==FNR{a[$1,$2,$3];next} {if (($1,$2,$3) in a) {print $4} else {print "not found"}}' f1 f2
0.55
0.09
0.88
not found
是否有一种方法可以使文件2中出现的、不在文件1中的任何行在匹配后仍添加到输出的末尾,例如:

0.55
0.09
0.88
not found
4    804     804     0.24
这样,当我将这两个文件粘贴回一起时,它们的外观如下所示:

1 800 800 0.51 0.55
2 801 801 0.01 0.09
3 802 802 0.01 0.88
4 803 803 0.23 not found
4 804 804 not found 0.04
或者有没有其他更优雅的解决方案具有完全不同的语法

 awk '{k=$1FS$2FS$3}NR==FNR{a[k]=$4;next}
      k in a{print $4;next}{print "not found";print}' f1 f2
上述一个班轮将为您提供:

0.55
0.09
0.88
not found
4 804 804 0.24

我真的不遵守规则。你能告诉我,有没有办法让它把最后一行输出为:4804804 notfound 0.24这样0.24将在第5列,当这个输出与文件1一起粘贴回来时,文件2中的其余数据将在第5列,第4列中notfound将指示文件1中不存在这个位置我还更改了“notfound”设置为“notfound”,否则过去的命令会认为这是两列,而不是1。为了澄清,当我将其粘贴回时,我希望它看起来像我问题中的最后一块代码。此外,当文件2中有两行不在文件1中时,它会在每行之间打印“notfound”…而且,它们的打印顺序与在文件2中显示的顺序相同,当我需要以与文件1相同的顺序打印它们时…(例如,如果文件2中的顺序颠倒,它仍将打印相同的结果)有什么想法吗?