两个文件中的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列匹配,打印不同的列的主要内容,如果未能解决你的问题,请参考以下文章