使用 awk 从文件 1 中搜索具有 3 列的文件 2
Searching File2 with 3 columns from File 1 with awk
有谁知道如何在不匹配的情况下打印 "Not Found",以便打印输出始终包含与文件 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[,,];next}(,,) in a{print }' 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),然后使用粘贴命令:
paste -d"\t" file1.txt file2-matches.txt > output.txt
但是考虑到我必须对 100 多个文件进行匹配,您是否可以建议更有效的方法?
添加一个else
子句:
$ awk 'NR==FNR{a[,,];next} {if ((,,) in a) {print } else {print "not found"}}' f1 f2
0.55
0.09
0.88
not found
有谁知道如何在不匹配的情况下打印 "Not Found",以便打印输出始终包含与文件 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[,,];next}(,,) in a{print }' 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),然后使用粘贴命令:
paste -d"\t" file1.txt file2-matches.txt > output.txt
但是考虑到我必须对 100 多个文件进行匹配,您是否可以建议更有效的方法?
添加一个else
子句:
$ awk 'NR==FNR{a[,,];next} {if ((,,) in a) {print } else {print "not found"}}' f1 f2
0.55
0.09
0.88
not found