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!
shellbefehl innerhalb awk
Dazu gibt es die system()-Funktion im awk:Allerdings war Deine Idee eines "Workarounds" nicht falsch, denn so geht es auch: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:Sollte dem entsprechen, was Du über basename erreichen willst. Hier muss nur awk ein bisschen rechnen und die ganzen basename-Prozesse werden eingespart.
Jochen
Code: Select all
awk '{ system ("basename " $0)}' datei
Code: Select all
awk '{ print "basename " $0 }' datei | sh
Alternativ könnte man ein basename ja im awk basteln:
Code: Select all
awk '{ sub (/.*\//, "", $0) ; print $0}' datei
Jochen
Die grösste Lüge der EDV? "Mal eben..."