使用awk从文件1中搜索具有3列的文件2

使用awk从文件1中搜索具有3列的文件2,awk,paste,Awk,Paste,是否有人知道如果不匹配,如何打印“未找到”,以便打印输出始终包含与文件1相同的行数 更具体地说,我有两个包含四列的文件: 文件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

是否有人知道如果不匹配,如何打印“未找到”,以便打印输出始终包含与文件1相同的行数

更具体地说,我有两个包含四列的文件:

文件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    803     804     0.24

这就是我现在使用的:

$ awk 'NR==FNR{a[$1,$2,$3];next}($1,$2,$3) in a{print $4}' file1.txt file2.txt

这将生成以下输出:

0.55

0.09

0.88

但是,我想得到这个:

0.55

0.09

0.88

Not Found

你能帮忙吗? 抱歉,如果以令人困惑的方式呈现;我对awk几乎没有经验,我自己也很困惑


在另一个问题中,我希望最终得到一个文件,该文件将来自文件2的数据添加到文件1中,如下所示:

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
我打算像以前一样生成文件(我们称之为file2 matches.txt),然后使用粘贴命令:

粘贴-d“\t”file1.txt file2-matches.txt>output.txt


但是考虑到我必须对100多个文件进行匹配,您是否可以建议有更有效的方法进行匹配?

添加
else
子句:

$ 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

非常感谢。我试着让它正常工作,但语法不正确。我也许应该把它作为一个单独的问题发布,但是你是否知道有没有办法让file2中不在file1中的任何额外行在剩余行之后添加到末尾?包括文件2列1 2 3??谢谢这么多单独的问题,是的,你可以进一步简化
awk'NR==FNR{a[$1,$2,$3];next}($1,$2,$3)在a{print$4;next}{print“not found”}'f1 f2