awk-hilfe!

soul_rebel

ist immer auf der flucht
direkt vorweg : ich weiß jeder hasst diese art von fragen, aber ich befinde mich in einem notfall :eek: :eek: :eek:
.... meine mutter fährt morgen auf dienstreise und ich hatte versprochen kppp auf ihrem kubuntu book zu "reperieren".
obwohl in den optionen "standard route auf diese adresse setzen" eingestellt ist, setzt er eine falsche route in die routing table.
ich wollte schnell ein skript schreiben was den ppp-pear als standardroute setzt doch scheitere an meinen shell-fähigkeiten.
wenn ich genug zeit hätte würde ichs mir erlernen (bzw das werde ich auch), aber ich muss jetzt zeimlich schnell wissen wie man aus diesem hier (ifconfig ppp0)
Code:
ppp0      Protokoll:Punkt-zu-Punkt Verbindung
          inet Adresse:62.134.108.33  P-z-P:62.180.95.6  Maske:255.255.255.255
          UP PUNKTZUPUNKT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:198 errors:0 dropped:0 overruns:0 frame:0
          TX packets:225 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:3
          RX bytes:164914 (161.0 KiB)  TX bytes:46372 (45.2 KiB)
die ip-adresse hinter "P-z-P:" rausfiltern kann, damit ich sie an
Code:
kdesu -c "route delete default; route add default gw $ADRESSE"
übergeben kann.
ich weiß dass das mit awk gehen sollte werde aber auf die schnelle nicht aus der man-seite schlau.
wenn jemand weiß welcher aufruf genau das hinkriegt wäre ich super dankbar!!!
 
$ cat text

Protokoll:Punkt-zu-Punkt Verbindung
inet Adresse:62.134.108.33 P-z-P:62.180.95.6 Maske:255.255.255.255
UP PUNKTZUPUNKT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:198 errors:0 dropped:0 overruns:0 frame:0
TX packets:225 errors:0 dropped:0 overruns:0 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:3
RX bytes:164914 (161.0 KiB) TX bytes:46372 (45.2 KiB)

$ cat text | grep P-z-P | sed -e 's/\:/\ /g' | awk '{print $5}'
62.180.95.6

müste so in etwa klappen, gibt da einige wege das zu filtern
 
awk ist das aber alles nicht :p

awk '/P-z-P/ { split($3, ip, ":"); print ip[2] }' < test.txt
 
Zuletzt bearbeitet von einem Moderator:
danke an euch alle!

ihr habt meinen tag gerettet :D

tib's version hat auf anhieb leider nicht geklappt, aber mit bofhs ging es.

danke auf jeden fall, bin erleichtert...
hoffe nur die dial-up dienste in irland haben noch die selben nummern...

EDIT: @ peafchen, musste auch nicht awk sein, aber mit deiner version gings sicherlich auch ;)
 
$ cat text | grep P-z-P | sed -e 's/\:/\ /g' | awk '{print $5}'

Oh mein Gott!

- Useless use of cat.
- grep(1), sed(1) und awk(1) mit jeweils simplen Kommandos innerhalb einer Pipe sind sogut wie immer flhcas.

Code:
sed 's/.*P-z-P:\([0-9.]*\).*/\1/p;d' text
 
paefchen schrieb:
awk ist das aber alles nicht :p

awk '/P-z-P/ { split($3, ip, ":"); print ip[2] }' < test.txt

Und noch so einer. :belehren:

- Das '<' ist ueberfluessig, awk(1) interpretiert alles hinter dem Programm bereits von sich aus als File (wie fast alle Tools unter Unix, mit Ausnahme von tr(1)).
- Explizites split()? Wozu, awk(1)'s very own job ist doch gerade das splitten der Eingaberecords.

Code:
awk -F '[ \t:]*' '$4 == "P-z-P" {print $5}' test.txt

Nachtrag: obiges Beispiel ist komplett bloated, kompakter geht's natuerlich so:

Code:
awk -F '[ \t:]*' '$4 == "P-z-P" && $0 = $5' test.txt
 
Meine Fresse, jetzt geht hier aber das Korinthenscheissen mit Turbomodus los :rolleyes:

kili schrieb:
Und noch so einer. :belehren:
- Das '<' ist ueberfluessig, awk(1) interpretiert alles hinter dem Programm bereits von sich aus als File (wie fast alle Tools unter Unix, mit Ausnahme von tr(1)).

Das ist ja fein für awk, ich gebe trotzdem inpliziet mit was als INPUT sein soll.
Mal ganz davon abgesehen: soul_rebel wird wohl ifconfig pipen, also wird es kein Text-File geben.

kili schrieb:
- Explizites split()? Wozu, awk(1)'s very own job ist doch gerade das splitten der Eingaberecords.

Viele Wege führen nach Rom, das wirst Du auch schon mitbekommen haben, Gell?!
soul_rebel fragte nach AWK, also hab ich das erste genommen was mir mit awk einfiel.
Wir können natürlich ein Wettbewerb starten wer den schönsten, kürzesten und Regelkonformsten Einzeiler baut :ugly:


kili schrieb:
Code:
awk -F '[ \t:]*' '$4 == "P-z-P" {print $5}' test.txt

Nachtrag: obiges Beispiel ist komplett bloated, kompakter geht's natuerlich so:

Code:
awk -F '[ \t:]*' '$4 == "P-z-P" && $0 = $5' test.txt

fein gemacht :cool:
 
paefchen schrieb:
Meine Fresse, jetzt geht hier aber das Korinthenscheissen mit Turbomodus los :rolleyes:

Ja, natuerlich! Deshalb habe ich ja auch den Oberlehrer mit angebracht. Und irgendwo muss man sich nach Feierabend ja abreagieren. Wo, wenn nicht hier? :D



Das ist ja fein für awk, ich gebe trotzdem inpliziet mit was als INPUT sein soll.
Mal ganz davon abgesehen: soul_rebel wird wohl ifconfig pipen, also wird es kein Text-File geben.

(Offtopic) Dazu faellt mir jetzt gerade join(1) unter Solaris 8 ein, das letzte Woche diverse Tobsuchtsanfaelle bei mir ausgeloest hatte -- die Kollegen vom anderen Ende des Ganges (nein, ich meine nicht den Fluss) kamen sogar besorgt an, um nachzusehen, warum ich so laut schreie.

Folgendes funktionierte:

Code:
some-stuff > file1
other-stuff > file2
join file1 file2

Das hier aber nicht (join bleibt haengen und verbraucht nur noch sinnlos CPU-Zeit):

Code:
some-stuff > file1
other-stuff | join file1 -

Aber das hier schon (im Gegensatz zur Pipe oben ist das zweite File hier seekable):
Code:
some-stuff > file1
other-stuff > file2
join file1 - < file2

Oh, und am Besten war, dass das hier dann wieder funktioniert hat:
Code:
other-stuff > file2
some-stuff | join - file2

Ich war echt begeistert. :grumble:

Wir können natürlich ein Wettbewerb starten wer den schönsten, kürzesten und Regelkonformsten Einzeiler baut :ugly:

Gerne ;)

Mir ging es aber vor allem darum, dass evtl. der eine oder andere Newbie auf solche schnell hingeferkelten Beispiele stoesst und daraus evtl. falsche (vereinfachte) Rueckschluesse darauf zieht, wie man das ganze Standardgeraffel unter Unix am effektivsten verwendet. Zu Hause und im Buero habe ich auch einiges an Scripten herumfliegen, die weder elegant noch schoen noch effizient sind. Aber die sieht wenigstens keiner. :rolleyes:
 
Wenn wir schon dabei sind, ich hätte es so gemacht:

# ifconfig ppp0|grep -Eo 'P-z-P:[0-9.]+'|sed 's|P-z-P:||1'

Oder so:

# ifconfig ppp0|grep -Eo 'P-z-P:[0-9.]+'|grep -Eo '[0-9.]+'

An awk habe ich mich noch nie getraut.
 
[LoN]Kamikaze schrieb:
# ifconfig ppp0|grep -Eo 'P-z-P:[0-9.]+'|sed 's|P-z-P:||1'

Oder so:

# ifconfig ppp0|grep -Eo 'P-z-P:[0-9.]+'|grep -Eo '[0-9.]+'

:belehren:

Auch, wenn ich hier gleich wieder als Korinthenkacker bezeichnet werde: das ist alles nicht ganz richtig, aber falsch.

Bitte, Leute, seht Euch mal die Manpages an, insbesondere die Section "STANDARDS", bevor Ihr hier irgendwelche gruseligen Kommandozeilen postet. Da diese Section bei grep(1) unter FreeBSD leider fehlt, moegen FreeBSDler bitte einen Blick auf http://www.opengroup.org/onlinepubs/000095399/utilities/grep.html werfen.

An awk habe ich mich noch nie getraut.

Code:
man awk|wc -l
     353
 
juhu eine tolle diskussion!

werde mich gleich morgen an die manpages setzen und mein bestes dazu geben... auch wenn es wahrscinelich kilis standards nicht genügen wird!

gute nacht auf jeden fall schon mal!
 
kili hat vollkommen Recht! Sonst hättet Ihrs von mir bekommen... =) awk kann einfach mehr als print $5... Nehmt es doch als konstruktive Kritik hin!
 
soul_rebel die dial-up nummern haben sich seit 15jahren nich geaendert also keine angst. haettest mal was sagen koennen das deine mum hier herkommt haette sie mir mal paar kippen mitbringen koennen :)
 
@marvin: ich komme aber auch noch diesen sommer nach irland, wo wohnst du?

wir haben einen ferienhaus in connemara, genauergesagt carna, co. galway.... hab als kind zwei jahre in irland gewohnt....

was die dial-up nummern angeht habe ich versucht von hieraus nach irland zu wählen um die verbindung zu testen aber es ging nicht, deswegen habe ich gezweifelt ob di nummern so noch stimmen...
 
soul_rebel neh ich wohne Co. Kildare is im osten. Aber galway is ja nich weit sind 3 stunden. Welchen Airport fliegt ihr? Shannon oder Dublin?
 
wir landen in shannon und müssen auch direkt weiter damit wir per bus am selben tag noch da ankommen wo wir hinwollen.
wir hatte eigentlich überlegt noch ein paar tage in galway zu bleiben aber so wie es aussieht, fahren wir direkt weiter (sind insgesamt nur 10 tage da). und von carna isses mehr als 1 1/2 stunden nach galway mitm bus. und der fährt nur einmal am tag...
aber ich komme jedes jahr mindestens einmal nach irland, vielleicht können wir ja nächstes jahr ein forentreffen - nord-nord-west sozusagen ;) - machen.
 
klar laesst sich bestimmt irgendwie machen da kann ich dir die BSD User group ireland mal vorstellen oder ein paar davon.

Cu
 
Zurück
Oben