0

我有 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
4

1 回答 1

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

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

于 2020-05-08T10:36:48.843 回答