我確實很難用shell腳本過濾一些文本。 基本上,我登錄到幾個網絡設備,我發現他們直接連接的鄰居。然後我在一個.txt文件導出這些結果,它看起來像這樣:使用shell腳本進行文本過濾
Host IP: 175.334.2.43
-------------------------
Device ID: first_device
Entry address(es):
IP address: 323.43.5.32
Platform: cisco 428, Capabilities: Router Switch IGMP
Interface: GigabitEthernet0/3, Port ID (outgoing port): GigabitEthernet0/10
Holdtime : 130 sec
advertisement version: 2
Protocol Hello: OUI=0x0fsdfs0C, Protocol ID=0x0fdf2; payload len=27, value=0dsgfjhb2CAE00FF0000
VTP Management Domain: ''
Native VLAN: 453
Duplex: full
Management address(es):
IP address: 323.43.5.32
-------------------------
Device ID: second_device
Entry address(es):
IP address: 323.43.5.398
Platform: cisco 428, Capabilities: Router Switch IGMP
Interface: GigabitEthernet0/5, Port ID (outgoing port): GigabitEthernet0/123
Holdtime : 130 sec
advertisement version: 2
Protocol Hello: OUI=0x0fsdfs0C, Protocol ID=0x0fdf2; payload len=27, value=0dsgfjhb2CAE00FF0000
VTP Management Domain: ''
Native VLAN: 453
Duplex: full
Management address(es):
IP address: 323.43.5.398
Host IP: 342.52.5.2
-------------------------
Device ID: third_device
Entry address(es):
IP address: 32.43.15.32
Platform: cisco 428, Capabilities: Router Switch IGMP
Interface: GigabitEthernet0/98, Port ID (outgoing port): GigabitEthernet0/165
Holdtime : 130 sec
advertisement version: 2
Protocol Hello: OUI=0x0fsdfs0C, Protocol ID=0x0fdf2; payload len=27, value=0dsgfjhb2CAE00FF0000
VTP Management Domain: ''
Native VLAN: 453
Duplex: full
Management address(es):
IP address: 32.43.15.32
-------------------------
Device ID: fourth_device
Entry address(es):
IP address: 0832.54.254.6
Platform: cisco 428, Capabilities: Router Switch IGMP
Interface: GigabitEthernet0/543, Port ID (outgoing port): GigabitEthernet0/16
Holdtime : 130 sec
advertisement version: 2
Protocol Hello: OUI=0x0fsdfs0C, Protocol ID=0x0fdf2; payload len=27, value=0dsgfjhb2CAE00FF0000
VTP Management Domain: ''
Native VLAN: 453
Duplex: full
Management address(es):
IP address: 0832.54.254.6
我要篩選此文件,並組織其列。我這樣做是使用filter_res.sh腳本:
#!/bin/bash
sed -e '/Management address(es):/{N;d;}' results.txt >results2.txt
grep "Host IP:" results2.txt | awk '{print $3}' >host_ip.txt
grep "Device ID:.*" results2.txt | awk '{print $3 ","}' >dev_ids.txt
grep "IP address: " results2.txt | awk '{print $3 ","}' >cpe_ip.txt
grep "Platform: " results2.txt | awk '{print $2 $3}' >chassis.txt
grep "Interface:" results2.txt >interfaces.txt
awk '{print $7}' interfaces.txt >cpe_int.txt
awk '{print $2}' interfaces.txt >agg_int.txt
pr -mts' ' dev_ids.txt cpe_ip.txt chassis.txt agg_int.txt cpe_int.txt >final_results.txt
的final_results.txt是OK,但我想最後一列在末尾;與host_ip每一行。這是結果我:
first_device, 323.43.5.32, cisco428, GigabitEthernet0/3, GigabitEthernet0/10
second_device, 323.43.5.398, cisco428, GigabitEthernet0/5, GigabitEthernet0/123
third_device, 32.43.15.32, cisco428, GigabitEthernet0/98, GigabitEthernet0/165
fourth_device, 0832.54.254.6, cisco428, GigabitEthernet0/543, GigabitEthernet0/16
我想會是什麼:
first_device, 323.43.5.32, cisco428, GigabitEthernet0/3, GigabitEthernet0/10, 175.334.2.43
second_device, 323.43.5.398, cisco428, GigabitEthernet0/5, GigabitEthernet0/123, 175.334.2.43
third_device, 32.43.15.32, cisco428, GigabitEthernet0/98, GigabitEthernet0/165, 342.52.5.2
fourth_device, 0832.54.254.6, cisco428, GigabitEthernet0/543, GigabitEthernet0/16, 342.52.5.2
將'host_ip.txt'添加到列文件列表到'pr'命令時發生了什麼? –
如果我添加它,則主機IP不會出現在其正確的位置上。應該爲其每個連接的設備重複這些IP。 – olivia
'我真的覺得很難用shell腳本來過濾一些文本。「 - 這是完美的,因爲這不是shell腳本的用途。 Shell腳本用於處理文件和進程以及對工具的調用順序。 Awk腳本是用來處理文本的,所以在UNIX中如果你需要過濾(或以其他方式處理)文本,shell只需調用awk來完成。 –