AWK am Beispiel
Ab und zu gibt es Situationen, in denen man Massendaten in andere Systeme importieren muß. Im ungünstigstem Fall darf man dann auch noch dieses unter Windows bewerkstelligen, was auf den ersten Blick recht schwierig ist. Ich höre es schon: Warum nimmst du nicht Excel ? Weil Excel bei wesentlich größeren Datenmengen einfach nach 64535 records in die Knie geht und die weiße Fahne hisst. Unter Linux wäre die Wahl auf die Konsole und awk gefallen. Aber unter Windows? Natürlich auch auf awk für windows. Kommen wir also mal zum eigentlichen Problem. Gegeben sind eine unendliche Zahl von Protokolldateien, die in eine MySQL DB importiert werden sollen, aber in der 2. Spalte das Datumsformat nicht richtig dargestellt wird. Ein Import ist also über z.b. CSV nicht einfach möglich.
Unter MySql sieht der Dateityp DATETIME als
YYYY-MM-DD HH:MM:SS, aber das Quellformat ist DD.MM.YYYY HH:MM:SS also muß
CSV Datei zum import fertig machen.
„SW_DZ“;“12.05.2009 15:21:24″;23;1;39945639861,1111
„$RT_DIS$“;“12.05.2009 15:21:53″;0;0;39945640196,7593
„SW_DZ“;“12.05.2009 15:22:26″;23;1;39945640578,7037
„SW_DZ“;“12.05.2009 15:23:26″;23;1;39945641273,1481
Aufruf gawk -f convert.awk speed.csv unter Windows
Hier nun das Script selbst:
# convert.awk
#
BEGIN {
FS = „;“
}
/SW_DZ/ {
print ( $1 „;“ substr($2,8,4) „-“ substr($2,5,2) „-“ substr($2,2,2) “ “ substr($2,13,8) „;“ $3 „;“$4 „;“$5 $n)
n=n+$3
}
END {
# Durchnitt
# print n/FNR
}
und so sieht das Ergebnis aus.
„SW_DZ“;2009-05-18 06:00:22;25;1;39951250254,6296
„SW_DZ“;2009-05-18 06:01:22;25;1;39951250949,0741
„SW_DZ“;2009-05-18 06:02:23;25;1;39951251655,0926
„SW_DZ“;2009-05-18 06:03:24;25;1;39951252361,1111
„SW_DZ“;2009-05-18 06:04:24;25;1;39951253055,5556
„SW_DZ“;2009-05-18 06:05:25;25;1;39951253761,5741