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