使用awk从文件1中搜索带有3列的File2

时间:2017-02-02 00:22:20

标签: 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     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中的数据添加到File1,如下所示:

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个文件进行匹配,是否有更有效的方法可以建议你这样做?

1 个答案:

答案 0 :(得分:0)

添加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