【发布时间】:2018-08-08 18:52:48
【问题描述】:
我想写的逻辑如下:
从文件 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
【问题讨论】:
-
显示您尝试过的一些代码或等待有人否决您的问题以及您可能得到的所有答案。
-
没有 bash 请求,一切都在 awk 中。为什么这被标记为 bash 呢?它可以在 bash 中完成,但请编辑您的问题以反映这一点。
-
我只在两个文件之间进行了基本的列匹配。我知道如何比较两个不同文件中的两列并打印一个值,但我不知道如何进行额外的匹配。我读过我需要使用磁盘来存储第一个匹配项,然后执行第二个操作,但我无法编写它。编辑帖子以包含我拥有的内容。
标签: awk