Совместить данные из двух разных файлов

Чтобы иметь запись об устройствах, подключенных к сети, я работаю над сценарием Expect который Show CDP neighbors detail информацию из команды « Show CDP neighbors detail и сохраняет определенные поля, включая Device Name, IP address, Interface and Port ID (outgoing port) , любое из этих полей работает как первичный ключ в моей базе данных, даже IP-адрес не вызывает того же IP-адреса, что не гарантирует, что это одно и то же устройство. По этой причине мне нужно поймать S / N каждого устройства с помощью show inventory , у меня есть вывод команды в отдельных текстовых файлах, и теперь мне нужно сопоставить информацию.

file1:

 Device ID: BIOTERIO IP address: 000.000.00.001 Interface: GigabitEthernet1/0/6, Port ID (outgoing port): GigabitEthernet0/1 Device ID: N7K-LAN(JAF1651ANDL) IP address: 000.000.0.002 Interface: GigabitEthernet1/0/1, Port ID (outgoing port): Ethernet7/23 Device ID: LAB_PESADO --More-- IP address: 000.000.000.003 Interface: GigabitEthernet1/0/11, Port ID (outgoing port): GigabitEthernet0/1 IP address: 000.000.000.003 Device ID: Arquitectura_Salones IP address: 000.000.000.04 Interface: GigabitEthernet1/0/9, Port ID (outgoing port): GigabitEthernet0/49 IP address: 000.000.000.04 Device ID: CIVIL_253 IP address: 000.000.000.005 Interface: GigabitEthernet1/0/4, Port ID (outgoing port): GigabitEthernet1/0/52 IP address: 000.000.000.005 Device ID: Arquitectura IP address: 000.000.000.006 Interface: GigabitEthernet1/0/3, Port ID (outgoing port): GigabitEthernet0/1 IP address: 000.000.000.006 Device ID: ING_CIVIL_DIR IP address: 000.000.0.007 Interface: GigabitEthernet1/0/10, Port ID (outgoing port): GigabitEthernet0/2 Device ID: ING_CIVIL IP address: 000.000.000.008 Interface: GigabitEthernet1/0/7, Port ID (outgoing port): GigabitEthernet0/2 IP address: 000.000.000.008 Device ID: Ingenieria_Posgrado IP address: 000.000.000.009 Interface: GigabitEthernet1/0/8, Port ID (outgoing port): GigabitEthernet0/1 IP address: 000.000.000.009 Device ID: Biblio_Barragan IP address: 000.000.000.10 Interface: GigabitEthernet1/0/2, Port ID (outgoing port): GigabitEthernet0/1 IP address: 000.000.000.10 Device ID: Electronica_Edif_3 IP address: 000.000.000.011 Interface: GigabitEthernet1/0/5, Port ID (outgoing port): GigabitEthernet0/1 IP address: 000.000.000.011 ]0;cesar@cesar-HP-Pavilion-15-NoteBook-PC: ~cesar@cesar-HP-Pavilion-15-NoteBook-PC:~$ awk '/Device ID|IP address|Interface|Port ID/ { print }' CDPdet.dat >tabladetallada.dat 

файл 2:

 show inventory NAME: "1", DESCR: "WS-C3750G-12S" PID: WS-C3750G-12S-E , VID: V06, SN: FDO1130Z9ZJ NAME: "GigabitEthernet1/0/1", DESCR: "1000BaseLX SFP" PID: , VID: , SN: H006K082 NAME: "GigabitEthernet1/0/2", DESCR: "10/100/1000BaseTX SFP" PID: GLC-T , VID: , SN: 00000MTC1666080Z NAME: "GigabitEthernet1/0/3", DESCR: "1000BaseLX SFP" PID: , VID: , SN: H118K083 NAME: "GigabitEthernet1/0/4", DESCR: "1000BaseLX SFP" PID: , VID: , SN: H006K041 NAME: "GigabitEthernet1/0/5", DESCR: "1000BaseSX SFP" PID: , VID: , SN: FNS11140FLE NAME: "GigabitEthernet1/0/6", DESCR: "1000BaseSX SFP" PID: , VID: , SN: P7K06UQ NAME: "GigabitEthernet1/0/7", DESCR: "1000BaseLX SFP" PID: , VID: , SN: H006K052 NAME: "GigabitEthernet1/0/8", DESCR: "1000BaseLX SFP" PID: , VID: , SN: H006K030 NAME: "GigabitEthernet1/0/9", DESCR: "1000BaseLX SFP" PID: , VID: , SN: FNS14200533 NAME: "GigabitEthernet1/0/10", DESCR: "1000BaseLX SFP" PID: GLC-LH-SMD , VID: V86, SN: FNS14201SG0 NAME: "GigabitEthernet1/0/11", DESCR: "1000BaseLX SFP" PID: GLC-LH-SMD , VID: V86, SN: FNS174202FT NAME: "GigabitEthernet1/0/12", DESCR: "1000BaseLX SFP" PID: GLC-LH-SMD , VID: V86, SN: FNS184203FS Barragan_3750> 

Я хотел бы иметь всю информацию, помещенную в тот же файл и в правильном порядке, примерно так:

 Device ID: BIOTERIO IP address: 000.000.00.001 Interface: GigabitEthernet1/0/6 Port ID (outgoing port): GigabitEthernet0/1 SN: P7K06UQ Device ID: N7K-LAN(JAF1651ANDL) IP address: 000.000.0.002 Interface: GigabitEthernet1/0/1 Port ID (outgoing port): Ethernet7/23 SN: H006K082 Device ID: LAB_PESADO IP address: 000.000.000.003 Interface: GigabitEthernet1/0/11 Port ID (outgoing port): GigabitEthernet0/1 SN: FNS174202FT ... etc 

Кто-нибудь знает, как это сделать, используя grep, awk или perl?

One Solution collect form web for “Совместить данные из двух разных файлов”

 #!/bin/bash FILE1=file1 FILE2=file2 while read line; do if [[ $line == Device\ ID* ]]; then echo -e "\n$line" expectIp=1 elif [[ $line == *IP\ address* && $expectIp -eq 1 ]]; then sed 's/^\s*//' <<< $line unset expectIp elif [[ $line == Interface* ]]; then interface=$(echo $line | grep -o 'Interface[^,]*,' | sed 's/,//') echo $interface echo $line | grep -o 'Port ID.*' justInterface=$(echo $interface | sed 's/Interface: //') grep -A1 \"$justInterface\" $FILE2 | grep -o 'SN: .*' fi done < $FILE1 
  • Perl-скрипт, извлекающий веб-ссылки с использованием регулярного выражения
  • Распечатайте последнее поле
  • Использование Perl для изменения указанных строк файла ASCII
  • Как добавить длительность времени, выраженную в days-hh: min: ss.nnn format?
  • Почему порядок результатов подстановки может отличаться при использовании с терминалом или с perl?
  • как извлечь некоторые строки в файл данных по сравнению с другим файлом данных? (слияние)
  • Как «grep» для длины строки в заданном диапазоне?
  • Отсутствует оболочный модуль в perl 5.18
  • Сортировка с Perl с учетом настроек локали
  • Установка пользовательского RPM говорит: «Не обновляет установленный пакет»
  • Сделать пакет rpm из дерева, совместимого с cpan?
  • Linux и Unix - лучшая ОС в мире.