peppie hat geschrieben:Dein Code löscht leider zerstört das Log, so dass bei bei 3/4 aller Zeilen alles nach dem ersten Semikolon ausradiert wird.
Ich sehe gerade, das haengt mit einer speziellen Eigenheit deiner Eingangsdaten zusammen. Die Felder sind per Semikolon
; getrennt, anstatt per Whitespace. Das muss man explizit als
FS (field separator) und
OFS (output field separator) angeben:
Code: Alles auswählen
gawk 'BEGIN{FS=OFS=";"}{ts=$1; $1=""; print(strftime("%F.%T", ts) "" $0)}' <tmp >a.log
Ich habe gerade nochmal extra getestet und verstehe nicht, wieso das bei dir oben gehen soll:
Code: Alles auswählen
$ awk -vnow="$(date +%s)" 'BEGIN{for(i=0;i<9;i++)printf("%d;192.168.0.%d;%d;foo\n",now+i,i,1234+i)}' > testdata
$ cat testdata
1413904872;192.168.0.0;1234;foo
1413904873;192.168.0.1;1235;foo
1413904874;192.168.0.2;1236;foo
1413904875;192.168.0.3;1237;foo
1413904876;192.168.0.4;1238;foo
1413904877;192.168.0.5;1239;foo
1413904878;192.168.0.6;1240;foo
1413904879;192.168.0.7;1241;foo
1413904880;192.168.0.8;1242;foo
$ gawk '{printf("%s", strftime("%d/%m/%Y-%H:%M:%S",$1)); }' testdata
21/10/2014-17:21:1221/10/2014-17:21:1321/10/2014-17:21:1421/10/2014-17:21:1521/10/2014-17:21:1621/10/2014-17:21:1721/10/2014-17:21:1821/10/2014-17:21:1921/10/2014-17:21:20$
$ gawk 'BEGIN{FS=OFS=";"}{ts=$1; $1=""; print(strftime("%F.%T", ts) "" $0)}' testdata
2014-10-21.17:21:12;192.168.0.0;1234;foo
2014-10-21.17:21:13;192.168.0.1;1235;foo
2014-10-21.17:21:14;192.168.0.2;1236;foo
2014-10-21.17:21:15;192.168.0.3;1237;foo
2014-10-21.17:21:16;192.168.0.4;1238;foo
2014-10-21.17:21:17;192.168.0.5;1239;foo
2014-10-21.17:21:18;192.168.0.6;1240;foo
2014-10-21.17:21:19;192.168.0.7;1241;foo
2014-10-21.17:21:20;192.168.0.8;1242;foo
$
Dem
printf() fehlt die Newline, daher wird's total zerrupft und ausserdem faellt da nur das Datum raus.
Gruss Cae