awk + datumberechnung

V

VerWurster

Grünschnabel
Hallo alle zusammen,

nun rächt es sich, dass ich komplexeres scripting immer gemieden habe, fuer einfache Sachen hat's immer gereicht.

Momentan beisse ich mir gerade die Zähne an awk aus.

Ich habe ein file.csv (rund 10000 Zeilen) mit folgendem Aufbau, dass zyklisch immer wieder ersetzt wird, jeweils mit neuem File-Namen und Werten:

,,host,Perf1,VG,UP,2011-11-28 16:30:00,0.086976

Im Nachgang verwurste ich den Inhalt via shellscript in eine rrd-db.

Dazu ist aber nötig, Datum und Uhrzeit (awk $7) in timeticks umzuwandeln.

Struktur des Vorgangs wäre theoretisch

Einlesen
Datum mit "awk -F, ..$7..." suchen und in timeticks ändern
neues file schreiben
Neue zeile einlesen
Datum mit "awk...."

wenn fertig > rrdtool


Lediglich mit awk kämpfe ich jetzt seit Tagen und habe immer mehr Bretter vor dem Kopf.

Wie bewege ich awk dazu die Konvertierung (wie z.B. als einzeiler in der shell zum Beispiel mit "date +%s -d"..."), file.csv zeile für Zeile die Umwandlung vorzunehmen und sequentiell mit den anderen Werten zusammen in ein neues out.csv zu schreiben?

Für jede Hilfe wäre ich dankbar!
 
Moin,
die -d option funktioniert bei mir auch nicht ("inavlid date ..."), aber mit --date="2011-11-28 16:30:00" funktionierts.
Bye,
yai.
 
hi yai,

die eigentliche Konvertierung ist hier bei mir (RHEL5.1) kein Problem:

date +%s -d"2011-11-28 16:30:00"
1322494200

Das PRoblem, in das ich mich verrannt habe, liegt eher darin, im script, das Datum heraus zu suchen, in ticks zu ändern und die ganze Zeile zu schreiben .... und dass Zeile für Zeile ....


So langsam ziehe ich eine Umschulung in Betracht ... ;-)
 
Sowas?
Code:
#!/bin/bash
while read LINE; do
 ZEITSTEMPEL=$(echo $LINE | cut -d , -f 7)
 TIMETICK=$(date +%s -d "$ZEITSTEMPEL")
 IFS=","
 array=($LINE)
 echo "${array[2]},${array[3]},${array[4]},${array[5]},$TIMETICK,${array[7]}" >> testneu.txt
 IFS=""
done < test.txt
 
Noch eine kleine Anpassung bezüglich IFS...

Code:
#!/bin/bash
while read LINE; do
 ZEITSTEMPEL=$(echo $LINE | cut -d , -f 7)
 TIMETICK=$(date +%s -d "$ZEITSTEMPEL")
 ORIG_IFS=$IFS
 IFS=","
 array=($LINE)
 echo "${array[2]},${array[3]},${array[4]},${array[5]},$TIMETICK,${array[7]}" >> testneu.txt
 IFS=$ORIG_IFS
done < test.txt
 

Ähnliche Themen

AWK 2 Fragen

Probs mit Perl script

awk: Bestimmte Spalten in zwei Zeilen vergleichen

Eingabe 2er paramerter????

Server-Monitoring mit RRDTool

Zurück
Oben