【问题标题】:AWK Column Match in Two Files, Print Different Column两个文件中的 AWK 列匹配,打印不同的列
【发布时间】: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


【解决方案1】:

awk来救援! P>

$ 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

请注意文件的顺序 P>

如果有要解码为 “NA” 无与伦比的条目,而不是空字符串,变化a[$1]($1 in a)?a[$1]:"NA",同样为a[$3]。 P>

【讨论】:

    猜你喜欢
    • 2017-08-19
    • 1970-01-01
    • 2021-06-15
    • 2016-10-23
    • 2015-09-19
    • 2018-07-12
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多