In order to have a record of the devices connected to a network I'm working on an Expect
script that takes information from the command Show CDP neighbors detail
and saves certain fields including Device Name, IP address, Interface and Port ID (outgoing port)
, any of those fields work as a primary key in my Database, not even IP address cause the same IP address doesn't guaranty it is the same device. For that reason I need to catch the S/N of each device with the command show inventory
, I've got both command's output in separate text files and now I need to match the information.
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
file 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>
I would like to have all the information placed in the same file and in the correct order, something like this:
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
Does anybody know how to do that using grep, awk or perl?