Skripta je nastala nakon pitanja na jednom drugom forumu, ovde je prenosim ako nekom zatreba. Bilo je potrebno prikazati interfejse koji sadrze IP adresu, kao i one koji nemaju adresu.
Primer izlaza komande koji treba da parsiramo:
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33200
priority: 0
groups: lo
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
nfe0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
lladdr 00:xx:xx:xx:xx:86
priority: 0
groups: egress
media: Ethernet autoselect (100baseTX full-duplex)
status: active
inet6 fe80::2xx:xxff:fexx:xx86%nfe0 prefixlen 64 scopeid 0x1
inet 192.168.1.4 netmask 0xffffff00 broadcast 192.168.1.255
enc0: flags=0<>
priority: 0
groups: enc
status: active
pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33200
priority: 0
groups: pflog
tun1: flags=9803<UP,BROADCAST,SIMPLEX,LINK0,MULTICAST> mtu 1500
lladdr fe:xx:xx:xx:xx:a9
priority: 0
groups: tun
status: no carrier
inet 10.100.1.9 netmask 0xffffff00 broadcast 10.100.1.255
inet6 fe80::fcxx:xxff:fexx:xxa9%tun1 prefixlen 64 scopeid 0x7
tun0: flags=9843<UP,BROADCAST,RUNNING,SIMPLEX,LINK0,MULTICAST> mtu 1500
lladdr fe:xx:xx:xx:xx:34
priority: 0
groups: tun
status: active
inet 10.100.1.9 netmask 0xffffff00 broadcast 10.100.1.255
inet6 fe80::fcxx:xxff:fexx:xx34%tun0 prefixlen 64 scopeid 0x8
pflog1: flags=141<UP,RUNNING,PROMISC> mtu 33200
priority: 0
groups: pflog
inet 127.0.0.1 netmask 0xff000000
Evo i ifconfigParse.awk skripte:
# Izostavljamo interfejse koje ne zelimo da prikazemo
# Stavite pod komentar ako zelite da prikazete i njih
/lo0/||/enc/{next}
# Imena interfejsa bezelimo u iface varijabli, i povecavamo gotif varijablu
# za 1. Ako imamo vise od 2 interfejsa to znaci da zadnji nema IP adresu
# i onda ga stavljamo u noip niz i smanjujemo gotif brojac
/flags/{
if(++gotif>1){noip[iface]++; gotif--}
iface=$1
}
# Nasli smo adresu. Interfejs i adresu cuvamo u buf niz
# a brojac smanjujemo za 1
/inet /&&gotif{
buf[iface]=$2
gotif--
}
# END blok
END{
# Ako brojac jos uvek sadrzi vrednost to znaci da zadnji interfejs
# nema adresu tako da i njega ukljucujemo u niz
if(gotif>=1) noip[iface]++
# Prikazujemo sadrzaj oba niza
for(i in buf) printf("%s\t%s\n", i, buf[i])
for(j in noip) printf("%s\tNo address\n", j)
}
Nakon obrade izlaz je:
$ ifconfig -a | awk -f ifconfigParse.awk
tun0: 10.100.1.9
tun1: 10.100.1.9
pflog1: 127.0.0.1
lo0: 127.0.0.1
nfe0: 192.168.1.4
pflog0: No address
enc0: No address
Prvobitno postavljeno na: http://www.daemonforums.org/showthread.php?t=5629
|