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 1055 korisnika na forumu :: 33 registrovanih, 2 sakrivenih i 1020 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: AleksSE, Atomski čoban, avijacija, bojankrstc, dankisha, dekan.m, Doca, DonRumataEstorski, Dorcolac, Duh sa sekirom, dule10savic, E_Kurir, ivan1973, kobaja77, Kubovac, kunktator, kybonacci, Marko Marković, Milos1389, MiroslavD, mkukoleca, mrvica78, Povratak1912, Prometeus, rovac, sabac015555m, Tragač, VJ, wolf431, wolverined4, Wrangler, Žoržo, 223223