两个文件中的AWK列匹配,打印不同的列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个文件中的AWK列匹配,打印不同的列相关的知识,希望对你有一定的参考价值。

我想写的逻辑如下:

从文件1中,比较第1列,并将第3列与文件2第1列中的任何行进行比较。如果匹配,则从文件1中打印行,同时从文件2中打印第2列的值(2),作为两个新的列。

执行匹配时,仅匹配前5个字符。

文件1:节点链接

NODE1   eth1    NODE2   eth1
NODE1   eth2    NODE3   eth1
NODE2   eth2    NODE4   eth1
NODE3   eth2    NODE4   eth2

文件2:节点环回

NODE1-USA   10.0.0.1/32
NODE2-USA   10.0.0.2/32
NODE3-USA   10.0.0.3/32
NODE4-USA   10.0.0.4/32

输出文件:

NODE1   10.0.0.1/32 eth1    NODE2   10.0.0.2/32 eth1
NODE1   10.0.0.1/32 eth2    NODE3   10.0.0.3/32 eth1
NODE2   10.0.0.2/32 eth2    NODE4   10.0.0.4/32 eth1
NODE3   10.0.0.3/32 eth2    NODE4   10.0.0.4/32 eth2

这是我想要的基础知识,但有一个额外的匹配。

awk 'FNR==NR{a[$1]=$2;next}{print $0,a[$1]?a[$1]:"NA"}' file2 file1
答案

awk救援!

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

NODE1 10.0.0.1/32 eth1 NODE2 10.0.0.2/32 eth1
NODE1 10.0.0.1/32 eth2 NODE3 10.0.0.3/32 eth1
NODE2 10.0.0.2/32 eth2 NODE4 10.0.0.4/32 eth1
NODE3 10.0.0.3/32 eth2 NODE4 10.0.0.4/32 eth2

请注意文件的顺序

如果有不匹配的条目要解码为“NA”而不是空字符串,请将a[$1]更改为($1 in a)?a[$1]:"NA",类似于a[$3]

以上是关于两个文件中的AWK列匹配,打印不同的列的主要内容,如果未能解决你的问题,请参考以下文章

AWK 比较两个文件中的两列输出匹配行 - 匹配中缺少行

awk基于匹配键在行中打印列数据

如何匹配两个不同表中的列并将选定的列输出到 MySQL 中的第三个表?

使用awk将一个文件中的列替换为另一个文件中的列?

如何解释和优化awk数组以匹配和修改两个文件的公共列

按一列合并两个文件 AWK