【发布时间】:2018-11-24 01:40:07
【问题描述】:
我有 3 个文件:
文件 1
NODE_2020 Cancer
NODE_2029 Thug
NODE_0902 Snap
文件 2
NODE_2020 Mikro
NODE_2029 Bold
NODE_0902 Mini
文件 3
NODE_2020 Gold
NODE_2080 Damn
NODE_0900 Gueo
我需要在其他两个中搜索文件 1 的第一列:如果值匹配,则 文件 2 的第 2 列 和 文件 3 的第 2 列 将打印成一个文件;如果不是,则将打印一个“NO MATCH”字符串作为回报。输出文件将是这样的:
Query File1 File2 File3
NODE_2020 Cancer Mikro Gold
NODE_2029 Thug Bold NO MATCH
NODE_0902 Snap Mini NO MATCH
非常感谢 Awk/sed/perl 解决方案。我坚持做的是使用文件 1 的第一列作为变量,仅使用 if 语句查看其他 2 个文件。
这是我尝试过的,使用文件 1 中的列并匹配到文件 2:
awk 'NR==FNR{a[NR]=$1;next} { print a[FNR],"\t", $2 }' file1 file2
它实际上适用于 2 个文件。不知道如何扩展到三个文件,并添加“NO MATCH”模式。
【问题讨论】:
-
请不要在 7 分钟内投反对票。给我一个合理的时间来发布您的要求。
-
你为什么不使用你提到的副本中的一种解决方案?
-
因为我找不到在 awk 中添加 if 语句以打印“NO MATCH”项并将此比较扩展到三个文件的方法。这主要是因为 awk 的答案通常只是代码,完全没有描述。
-
awk 答案通常只是代码,因为它们通常是清晰、简单且简单易懂的,只要浏览一下文档即可。