Добавьте столбцы в файл CSV, сопоставив поля с другим файлом CSV в bash - PullRequest
0 голосов
/ 08 мая 2020

У меня есть 2 CSV файла. File1 - это существующий список частных IP-адресов и их имени хоста. File2 - это ежедневный отчет, в котором 8 столбцов, 2 из которых содержат частный IP. Я хочу сравнить файл2 с файлом1, сопоставив поле 4 и поле 7 файла2 с полем 2 файла1. Затем, после сопоставления, я хочу добавить поле 3 и поле 6 файла 2 в соответствии с совпадениями поля 4 и поля 7 с полем 2 файла 1.

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

1 Ответ

1 голос
/ 08 мая 2020

Если ваши входные файлы выглядят так, то есть первая версия, с пробелами после запятой:

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-адрес является publi c IP, мне нужно выполнить поиск whois вместо этого, чтобы получить OrgName

Я предлагаю вам задать еще один вопрос об этом втором topi c. Как в профессиональных письмах: один вопрос = один вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...