我想写的逻辑如下:
从文件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
答案 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]
。