在bash中通过匹配字段和另一个csv文件来添加csv文件中的列。

问题描述 投票:0回答:1

我有2个csv文件。File1是一个现有的私人IP地址列表& 它的主机名。File2是一个有8列的每日报告,其中2列包含了私人IP.我想将file2和file1进行比较,将file2的字段4和字段7与file1的字段2进行匹配。然后,我想根据file1的字段4和字段7与file1的字段2的匹配情况,追加file2的字段3和字段6。

File1.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
csv awk
1个回答
1
投票

如果你的输入文件是这样的,即第一个版本,逗号后有空格。

File1. csv

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

和。

File2. 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的信息。

我建议你再发一个关于这第二个话题的问题。就像专业邮件中一样:一个项目=一个问题。

© www.soinside.com 2019 - 2024. All rights reserved.