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 851 korisnika na forumu :: 46 registrovanih, 6 sakrivenih i 799 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: _Sale, A.R.Chafee.Jr., AleksSE, amaterSRB, Apok, aramis s, bmw335d, darionis, darkangel, doom83, Drug pukovnik, Duh sa sekirom, duskovuk63, Georgius, goxin, h8propaganda, havoc995, ILGromovnik, jovan.krcmar, Koca Popovic, Kubovac, kybonacci, mandic.101, MB120mm, Mercury, mgaji21, mige, Milan A. Nikolic, Milos ZA, Mixelotti, Mlav, nenad812, pristinski korpus, RADOVAN.S, Revolucion, Sall, snop, Srki94, suton2, tomigun, ugljesatodorovic, USSVoyager, vlad the impaler, vlvl, wolverined4, zoidbergs