gpt4 book ai didi

bash - 在另一行上反向匹配多个字段

转载 作者:行者123 更新时间:2023-11-29 09:27:14 25 4
gpt4 key购买 nike

我想写的逻辑如下:

如果当前行的第 1 列与任何其他行的第 3 列匹配,并且如果当前行的第 3 列也与该行的第 1 列匹配,则打印两者的第 1 列和第 2 列行在同一行。

下面是我的输入文件:

接口(interface)表(输入):

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

Bonus 针对您的附加条件的解决方案:

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

关于bash - 在另一行上反向匹配多个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48893643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com