Parsiranje 'ifconfig -a' izlaza awk skriptom

Parsiranje 'ifconfig -a' izlaza awk skriptom

offline
  • soxxx 
  • Prijatelj foruma
  • Pridružio: 25 Maj 2005
  • Poruke: 1482
  • Gde živiš: Gracanica, Kosovo

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



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
Ko je trenutno na forumu
 

Ukupno su 601 korisnika na forumu :: 44 registrovanih, 7 sakrivenih i 550 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 1567 - dana 15 Jul 2016 19:18

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 4channer, A.R.Chafee.Jr., aljosa7, antoniostimacmunta, baza, blake, BlekMen, bojank, darkangel, DH, djboj, Djovani, Dorcolac2, Drug pukovnik, eighty-one, Faki-Valjevo, Hektor2, lojola, LUDI2, Maschinekalibar, Mercury, Metanoja, Mikulino, moldway, nuke92, Oluj2.1, Perko91, plavii, proka89, RADOVAN.S, rkekoke, rodoljub2, ruseskij, Shomy2, skvara, soonne, sosko, SsssssNOVI, theNedjeljko, versus, VJ, White Knight, zodiac94, zoidbergs