Toon posts:

awK

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik had ooit eens een script waar mee ik de x string kon pakken met awk bv

ifconfig et1 | grep inet | awk ?????...ben het vergeten en ik kom er niet meer uit

awk PRIN {$2} ofzo iets was het...

  • jeroen|IA
  • Registratie: Juni 1999
  • Laatst online: 26-05-2025
in dat geval moet het awk '{print $2}' zijn. die regel pakt van standard input de tweede kolom (gescheiden door spaties) en geeft die door aan standard het output channel (je terminal als je er niks achter zet).

Je moet dus even goed kijken wat je nou precies wilt "vangen" uit de output van ifconfig. Aan de "inet" te zien wil je het ip weten :)

Op een Linux bak (RH6.2 getest) print dit commando een keurig lijstje met de ips van alle interfaces uit:
/sbin/ifconfig -a | grep inet | awk '{print $2}' | sed 's/.*:\(.*\)/\1/'

Verwijderd

Topicstarter
Heyy!..dankje wel!!..:* (hehe....)

dat sed :? gedeelte kende ik helmaal nog niet..., zal daar ook eens mee gaan spelen

  • jeroen|IA
  • Registratie: Juni 1999
  • Laatst online: 26-05-2025
Doe dat :) de combinatie sed & awk roelt, echt heel erg handig als je bepaalde info uit de output van een commando wilt filteren (kan natuurlijk ook met Perl, maar goed...)

Overigens kan die regel toch nog iets korter :)

awk '/inet/ {print $2}' <(/sbin/ifconfig -a) | sed 's/.*:\(.*\)/\1/'

Verwijderd

Topicstarter
Ja..dit is echt cooltjes.8-) maar dat sed doet het bij niet helemaal lekker..eigenlijks helemaal niet.. zo wel komen doordat ik slack draai..:?

  • jeroen|IA
  • Registratie: Juni 1999
  • Laatst online: 26-05-2025
Hoezo doet het niet? kan ie sed niet vinden of geeft sed een foutmelding, of zelfs helemaal geen output?

Anders moet je ff proberen wat er uitkomt als je dat stuk van sed eraf laat. die sed regel is bedoeld om het stuk "addr:" eraf te kappen zodat je alleen het ip overhoudt, maar niet alle ifconfigs van de verschillende Unices zetten dat ertussen, dus je hebt kans dat het helemaal niet nodig is.

Verwijderd

Topicstarter
Sorry *D hij doet het al had een type foutje, zal me even verdiepen in sed want al die /-en zeggen me niks..:? igg thanks!!

maar je typte dat sed er voor was om addr: er af te halen dat kan "cut -d ":" -f 2" toch ook ofniet??...

  • jeroen|IA
  • Registratie: Juni 1999
  • Laatst online: 26-05-2025
Tuurlijk, dat gaat immers op voor heel UNIX. There Is More Than One Way To Do It (TIMTOWTDI :))

Overigens hebben die vage tekens achter sed op zich niks met het commando sed te maken, dat is een zgn. substitute reguliere expressie die (in volgorde): zoekt naar een rij willekeurige karakters gevolgd door een ":" met daarachter weer een rijtje willekeurige karakters en die hele string verandert in het willekeurige rijtje karakters dat achter de ":" van de oorspronkelijke string stond. Met andere woorden: kap alles tot en met de ":" van het begin van de string af :)

Verwijderd

Topicstarter
hehe:) het lijkt wel op algebra. denk dat ik het maar op cut hou al hoewel sed zijn syntax wel wat stoerder uitzietB-) nu moet ik die var's nog vast zetten

ETH= ifconfig eth0 | grep inet | awk '{print $2}' (THANKX JEROEN) | cut -d ":" -f 2

als ik dit intyp en later weer echo $ETH doe (in het zelde script) krijg ik als output ...helemaal niets!|:(

aan halings tekens helpen ook niet want dan zet hij het commando dus in eth..da's ook niet de bedoeling.

Verwijderd

Op maandag 04 december 2000 14:13 schreef Gila het volgende:
aan halings tekens helpen ook niet want dan zet hij het commando dus in eth..da's ook niet de bedoeling.
Geen aanhalingstekens gebruiken maar backquotes (omgekeerde enkele aanhalingstekens):

ETH=`ifconfig eth0 | grep inet | awk '{print $2}' | cut -d ":" -f 2`

  • jeroen|IA
  • Registratie: Juni 1999
  • Laatst online: 26-05-2025
Hehe.. ik heb nog even zitten puzzelen om het helemaal in AWK te doen, maar daarvoor heb ik er een scriptje van gemaakt. Op een gegeven moment is het niet meer op de command line te doen :)
code:
1
2
3
4
5
#!/bin/awk -f
BEGIN {while ("/sbin/ifconfig -a" | getline)
                if ($1 == "inet") {
                         print gensub(/.*:(.*)/, "\\1", "g", $2)
                }}
Pagina: 1