shellbefehl innerhalb awk

Post Reply
Message
Author
robn9

shellbefehl innerhalb awk

#1 Post by robn9 »

Hallo allerseits,

ich möchte gerne eine Liste an awk übergeben. Hier soll dann auf jede Zeile ein Befehl angewendet werden.
Also in etwa:
cat datei | awk basename zeile

Ist das möglich? Wenn ja wie?
Ich hoffe ich habe mich einigermaßen deutlich ausgedrückt. Also ich möchte
eigentlich auch kein workaround, also mit awk '{printf "%s", $0}' | basename oder so ähnlich. Würde in diesem Falle sowieso nicht gehen, da basename wohl keine pipes verarbeitet.

Danke für Eure Hilfe!

User avatar
jochen
prolinux-forum-admin
Posts: 699
Joined: 14. Jan 2000 15:37
Location: Jülich
Contact:

#2 Post by jochen »

Dazu gibt es die system()-Funktion im awk:

Code: Select all

awk '{ system ("basename " $0)}' datei
Allerdings war Deine Idee eines "Workarounds" nicht falsch, denn so geht es auch:

Code: Select all

awk '{ print "basename " $0 }' datei | sh
Das ist bei vielen Zeilen vielleicht sogar performanter, da system() m.E. immer eine Shell zum Ausführen der Kommandos startet und damit immer 2 Prozesse pro Zeile statt nur einem.

Alternativ könnte man ein basename ja im awk basteln:

Code: Select all

awk '{ sub (/.*\//, "", $0) ; print $0}' datei
Sollte dem entsprechen, was Du über basename erreichen willst. Hier muss nur awk ein bisschen rechnen und die ganzen basename-Prozesse werden eingespart.

Jochen
Die grösste Lüge der EDV? "Mal eben..."

robn9

#3 Post by robn9 »

Hammer !!!
Danke, Deine Antworten haben keine Fragen mehr offen gelassen. Insbesondere die letzte Anweisung bringt in meinem Falle eine enorme Performancesteigerung.
Also Danke nochmal!

Gruß,
robn9

Post Reply