【问题标题】:Append columns in csv file by matching the fields with another csv file in bash通过将字段与 bash 中的另一个 csv 文件匹配来在 csv 文件中追加列
【发布时间】:2020-05-08 04:18:50
【问题描述】:

我有 2 个 csv 文件。 File1 是现有的私有 IP 地址及其主机名列表。 File2 是一份每日报告,有 8 列,其中 2 列包含私有 IP。 我想通过将 file2 的字段 4 和字段 7 与 file1 的字段 2 进行比较来比较 file2 和 file1。然后,在匹配时,我想根据字段 4 和字段 7 与 file1 的字段 2 的匹配,附加 file2 的字段 3 和字段 6。

文件1.csv

PC1,192.168.3.1
PC2,192.168.3.2
PC3,192.168.3.3

File2.csv(大约有 50 行)

Port,Type,S_Host,S_IP,Port,D_Host,D_IP,Port
2,tcp,N/A,192.168.3.1,2,N/A,192.168.3.2,8
3,tcp,N/A,192.168.3.2,2,N/A,192.168.3.3,3

我需要编写一个 bash 脚本来自动化 file2。

期望的输出:

Port,Type,S_Host,S_IP,Port,D_Host,D_IP,Port
2,tcp,PC1,192.168.3.1,2,PC2,192.168.3.2,8
3,tcp,PC2,192.168.3.2,2,PC3,192.168.3.3,3

【问题讨论】:

  • 欢迎来到 SO,在 SO 上,我们鼓励用户添加他们为解决自己的问题所做的努力,所以请在您的问题中添加相同的内容,然后让我们知道。
  • 提示:您可以使用join 命令。
  • 请将该示例输入的所需输出(无描述)添加到您的问题(无评论)。
  • 添加了我想要的输出:)
  • 将 file1 读入 awk 中的数组(由 IP 索引),然后处理 file2 并使用字段 4 和 7 中的 IP 查找主机名,并将字段 3 和 6 设置为等于生成的主机名并打印记录。

标签: csv awk


【解决方案1】:

如果您的输入文件如下所示,即第一个版本,逗号后有空格:

文件1.csv

Host, IP
PC1, 192.168.3.1
PC2, 192.168.3.2
PC3, 192.168.3.3

和:

文件2.csv

Port, Type, S_Host, S_IP, Port, D_Host, D_IP, Port
2, tcp, N/A, 192.168.3.1, 2, N/A, 192.168.3.2, 8
3, tcp, N/A, 192.168.3.2, 2, N/A, 192.168.3.3, 3

试试:

#!/bin/bash
awk '
  BEGIN {FS = ", "; OFS = ", "}
  (FNR == NR) && (NR > 1) {hh[$2] = $1}
  NR > FNR {
    if (FNR == 1) 
      print; 
    else 
      print $1, $2, hh[$4], $4, $5, hh[$7], $7, $8;
  }
' File1.csv File2.csv

这是我得到的输出:

Port, Type, S_Host, S_IP, Port, D_Host, D_IP, Port
2, tcp, PC1, 192.168.3.1, 2, PC2, 192.168.3.2, 8
3, tcp, PC2, 192.168.3.2, 2, PC3, 192.168.3.3, 3

另外,如果 IP 是公共 IP,我需要进行 whois 搜索来获取 OrgName

我建议您就第二个主题发布另一个问题。就像在专业电子邮件中一样:一项 = 一个问题。

【讨论】:

  • 我只在皮埃尔的第 3 列和第 6 列得到空白。
  • 有人赞成我的回答,但您说有关于空格的问题。它是否有效?如果没有,究竟会发生什么?使用您在删除空白后提供的输入文件,我得到了所需的输出(请参阅我编辑的输出答案)。
  • 它不工作。第 3 列和第 6 列在输出中返回空。
  • @scriptdummy:您的 csv 文件中逗号后是否有空格?
  • 是的 Pierre 在我的 csv 文件中逗号后有空格
猜你喜欢
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多