在另一条线上反向匹配多个场

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

Educational Codeforces Round 41(已补D,E)

一条线上的多个分配未按预期工作

Python中的锯齿线

CAN数据传输线的结构?

查看一个点是不是位于一条线上(向量)