在另一条线上反向匹配多个场
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在另一条线上反向匹配多个场相关的知识,希望对你有一定的参考价值。
我想写的逻辑如下:
如果当前行的第1列与任何其他行的第3列匹配,并且如果当前行的第3列也与该行的第1列匹配,则在同一行上打印两行的第1列和第2列。
以下是我的输入文件:
接口表(输入):
NODE1 eth1 NODE2
NODE1 eth2 NODE3
NODE2 eth1 NODE1
NODE2 eth2 NODE4
NODE3 eth1 NODE1
NODE3 eth2 NODE4
NODE4 eth1 NODE2
NODE4 eth2 NODE3
链接表(所需输出):
NODE1 eth1 NODE2 eth1
NODE1 eth2 NODE3 eth1
NODE2 eth2 NODE4 eth1
NODE3 eth2 NODE4 eth2
下面是一个说明这一点的网络图。
NODE1--eth1---link1---eth1--NODE2
| |
eth2 eth2
| |
| |
link2 NETWORK link3
| |
| |
eth1 eth1
| |
NODE3--eth2---link4---eth2--NODE4
编辑2018-03-01
我添加了一个额外的列,并且还要打印它。
输入:
NODE1 adapter1 eth1 NODE2
NODE1 adapter2 eth2 NODE3
NODE2 adapter1 eth1 NODE1
NODE2 adapter2 eth2 NODE4
NODE3 adapter1 eth1 NODE1
NODE3 adapter2 eth2 NODE4
NODE4 adapter1 eth1 NODE2
NODE4 adapter2 eth2 NODE3
产量
NODE1 adapter1 eth1 adapter1 NODE2 eth1
NODE1 adapter2 eth2 adapter1 NODE3 eth1
NODE2 adapter2 eth2 adapter2 NODE4 eth1
NODE3 adapter2 eth2 adapter2 NODE4 eth2
答案
短awk
解决方案:
awk '$3","$1 in a{ print $3, a[$3","$1], $1, $2 }{ a[$1","$3]=$2 }' OFS='\t' file
输出:
NODE1 eth1 NODE2 eth1
NODE1 eth2 NODE3 eth1
NODE2 eth2 NODE4 eth1
NODE3 eth2 NODE4 eth2
额外条件的奖金解决方案:
awk '($4,$1) in a{ print $4, a[$4,$1], $2, $1, $3 }{ a[$1,$4]=$2 OFS $3 }' OFS='\t' file
输出:
NODE1 adapter1 eth1 adapter1 NODE2 eth1
NODE1 adapter2 eth2 adapter1 NODE3 eth1
NODE2 adapter2 eth2 adapter1 NODE4 eth1
NODE3 adapter2 eth2 adapter2 NODE4 eth2
以上是关于在另一条线上反向匹配多个场的主要内容,如果未能解决你的问题,请参考以下文章
Educational Codeforces Round 41