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

Чтобы иметь запись об устройствах, подключенных к сети, я работаю над сценарием 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 
  • как заменить выражение sed (изменить и распечатать только согласованную строку) с выражением perl?
  • Обработка динамически изменяющихся позиций столбцов и разбиения файлов
  • Linux эквивалентен удалению PowerShell «один ко многим»
  • как удалить строку из файла XML
  • perl one liner + как соответствовать IP-адресу, который находится в поле файла first / sec
  • Как происходит модификация файла inplace в файле?
  • Perl-скрипт, извлекающий веб-ссылки с использованием регулярного выражения
  • Perl - добавление строк подчеркивания и сортировки
  • объединить несколько файлов на основе первого столбца и сохранить проблемы с памятью
  • Обрезка одной части, если она равна другой части?
  • Почему бы не запустить скрипт Perl CGI
  • Interesting Posts

    Как ограничить использование дискового пространства пользователями без квот?

    В сценарии bash, как фиксировать stdout по очереди

    Gentoo Linux portage USE flags: в чем разница между удалением по умолчанию и отсутствием значения по умолчанию, как сравнивать значения по умолчанию, no-multilib?

    gnome-terminal сломан из-за gsettings + libglib

    Почему javascript document.lastModified перестал работать и вернул текущую дату?

    Как обновить ядро ​​со всеми зависимостями в Debian?

    UFW: разрешить трафик только с динамического IP на последних двух элементах

    Символическая ссылка становится нечитаемой после prctl (PR_SET_DUMPABLE, 0);

    Помощь в создании проектов Yocto (open embedded) с использованием кластерных вычислений в Linux

    Пользователи, группы и другие пользователи устанавливают один пользовательский рабочий стол

    Как я могу дифференцировать диск ввода-вывода, явно выполняемый пользователем и предварительной выборкой ОС?

    libvirt – virbr0 – настройка IP-адреса

    Каталог Untar из большого tarball

    проблемы с GNU tail -f и комбинацией команд

    Что такое ANALYZE / CATALOG для каталога бинарных сообщений Linux msginit?

    Linux и Unix - лучшая ОС в мире.