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 615 korisnika na forumu :: 38 registrovanih, 8 sakrivenih i 569 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3028 - dana 22 Nov 2019 07:47

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., Apok, babaroga, bane52, bato3, Bureksmesom, CUCLA70, Dorcolac, dragon986, flash12, goxin, kaptain2, Kos93, lacko2, lekso, Lieutenant, Lucije Kvint, Markoni29, mačković, Milan A. Nikolic, Milenko Vujinovic, nemkea71, neno panic, nikoladgajic, Panter, Sasa Pavlovic, Senne, Sibin2, sosko, Srki94, suton2, Toni, vasa.93, VladaKG1980, vladas87, vlvl, voja64, Zmaj 99