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

时间:2018-02-28 19:32:35

标签: 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

1 个答案:

答案 0 :(得分:1)

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]