• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[solved] awk: Datumformat in Zeile ändern

Hallo,

ich habe eine Datei mit folgenden Beispielzeilen:

Code:
lo;NTX;20070404;09:53:19;fhg;1;172.21.111.44;34718;
li;NTX;20070601;15:54:30;fhg;1;172.21.111.44;38114;

Ich muss das Datum im dritten Feld von yyyymmdd in dd.mm.yyyy umwandeln. Folgenden Code habe ich:

Code:
...
		awk -F ';' '{
			DATUM_NEU=substr( $3, 7, 2 )"."substr( $3, 5, 2)"."substr( $3, 1, 4)
			sub( /$3/, DATUM_NEU, $0 )
			print $3
			print DATUM_NEU
			print $0 }' $WORKVERZ/$DATEI_TMP
...

Folgende Ausgabe kommt raus. Das Datum wird zwar umgewandelt, aber der sub-Befehl schein nicht zu funktionieren, Hat da jemand eine Idee?

Code:
20070404
04.04.2007
lo;NTX;20070404;09:53:19;fhg;1;172.21.111.44;34718;
20070601
01.06.2007
li;NTX;20070601;15:54:30;fhg;1;172.21.111.44;38114;

Grüße + Danke für Hilfe,
Simon
 
Nein ich habe ein anderes awk-Skript als Vorlage genommen, u.a.:

AUFTRAGGEBER_2=substr( $21, 28, 27 ); sub( / +$/, "", AUFTRAGGEBER_2 )

Und da funktioniert es ganz normal! Undauf diversen Seiten wird das auch so verwendet, d.h. dass das zu ersetzende Muster in /../ eingeschlossen wird. Komisch... :shock:

Viele Grüße,
Simon
 
dukenuker schrieb:
Und da funktioniert es ganz normal! Undauf diversen Seiten wird das auch so verwendet, d.h. dass das zu ersetzende Muster in /../ eingeschlossen wird. Komisch... :shock:
Ja, aber in deinem Fall ist doch $3 kein Muster sondern eine Variable...

In vi usw. ist hier die Logik etwas anders. Darum mein Hinweis.
 
notoxp schrieb:
dukenuker schrieb:
Und da funktioniert es ganz normal! Undauf diversen Seiten wird das auch so verwendet, d.h. dass das zu ersetzende Muster in /../ eingeschlossen wird. Komisch... :shock:
Ja, aber in deinem Fall ist doch $3 kein Muster sondern eine Variable...
M.E. ist $3 schon ein Muster (in einer Varaiblen), welches jede Zeile wechselt.
Wenn ich schreibe:
Code:
sub( /20070404/, "04.04.2007" )
Dann klappt es auch, aber nicht wenn ich schreibe:
Code:
DATUM_NEU=substr( $3, 7, 2 )"."substr( $3, 5, 2)"."substr( $3, 1, 4)
sub( /$3/, 04.04.2007 )
 
dukenuker schrieb:
M.E. ist $3 schon ein Muster (in einer Varaiblen), welches jede Zeile wechselt.
Wenn ich schreibe:
Code:
sub( /20070404/, "04.04.2007" )
Dann klappt es auch,
Da ich auch nur noch selten awk verwende, weiß ich das jetzt auch nicht mehr genau. Ich weiß nicht, ob awk überhaupt ersetzungen innerhalb der Slashes zulässt. Eventuell wird dann das $ als Zeilenende interpretiert...
 
notoxp schrieb:
dukenuker schrieb:
M.E. ist $3 schon ein Muster (in einer Varaiblen), welches jede Zeile wechselt.
Wenn ich schreibe:
Code:
sub( /20070404/, "04.04.2007" )
Dann klappt es auch,
Da ich auch nur noch selten awk verwende, weiß ich das jetzt auch nicht mehr genau. Ich weiß nicht, ob awk überhaupt ersetzungen innerhalb der Slashes zulässt. Eventuell wird dann das $ als Zeilenende interpretiert...

Stimmt!! Das war es was ich nicht beachtet habe!
 
Schade das awk kein translate kann, sonst könnte man elegant
dieses machen:

DATE=20070404 ; echo "12.34.5678" | tr "56783412" "$DATE"

Oder mit Uhrzeit, gleiches System und mit sed:
DATE=20070406235959 ; echo "12.34.78 Hh:Mm:Ss" | sed "y/56783412HhMmSs/$DATE/"

:)

Edit:$Date wieder eingefügt. Thanks to notoxp. Das Date war beim Edit und einfügen von sed verloren gegangen..
 
Oben