PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : awk und split



rtsx
21-04-2008, 15:33
Hallo,

ich habe ein Problem mit AWK und der dazugehoerigen SPLIT Funktion.
Ich möchte in einem Shell script (ash aus der busybox 1.8.2) einen Dateinamen vom dazugehoerigen Pfad trennen.

Leider bleibt mein Script dabei immer stecken.
Ich habe den Befehl nun mal aus dem Script geloest und fuehre ihn in der Shell aus:

# /usr/bin/awk '{n=split("/home/user/datei.tar",tmp,"/");print tmp[n]}'

Nach dem bestaetigen bleibt die Shell an der Stelle stehen.
Druecke ich einmal ENTER erscheint eine Leerzeile und darauf folgt "datei.tar"
Bei jedem weiteren druecken der ENTER Taste erscheint eine weitere Leerzeile und dann die Datei.

Kann mir jemand sagen woher diese Leerzeilen kommen?
Ich habe schon mit Semikolons etc probiert, war aber nicht erfolgreich.

Ich waere fuer jeden Tipp dankbar.

Gruss
Tobias

rtsx
21-04-2008, 15:47
Ich bin gerade ueber basename gestolpert und das scheint genau das zu sein was ich brauche.... wenn aber jemand eine Erklaerung fuer mein awk Problem hat, waere ich trotzdem fuer eine Erklaerung dankbar ;)

Gruss
Tobias

undefined
21-04-2008, 16:29
warum soll das nicht gehen?

echo /home/user/datei.tar | awk '{n=split($0,tmp,"/");print tmp[n]}'

ContainerDriver
21-04-2008, 17:15
Hallo.


Kann mir jemand sagen woher diese Leerzeilen kommen?


awk verarbeitet soweit ich weiß die Eingabe zeilenweise. In deinem Beispiel liest awk von stdin und fängt erst mit der Arbeit an, wenn es ein Newline oder ein EOF (+ ein vorherig eingegebenes Zeichen) gelesen hat (da du vor deinem Funktionsblock kein Muster/Pattern angegeben hast, wird der Code für jede Eingabezeile ausgeführt).
Um Code vor der Eingabe von Zeichen ausführen zu können, gibt es das BEGIN Statement (http://en.wikipedia.org/wiki/Awk#Hello_World). Laut Wikipedia beendet sich dann awk auch gleich, wenn sonst keine Pattern und Actions angegeben sind.



[florian@leuchtturm1 ~]$ awk 'BEGIN {n=split("/home/user/datei.tar",tmp,"/");print tmp[n]}'
datei.tar


Gruß, Florian

rtsx
22-04-2008, 09:11
Hi,

dankeschoen fuer die beiden Tipps, funktionieren beide einwandfrei.

Danke auch fuer die Erklaerung, das scheint mein Problem gewesen zu sein ;)

Gruss
Tobias