awk + datumberechnung

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von VerWurster, 05.12.2011.

  1. #1 VerWurster, 05.12.2011
    VerWurster

    VerWurster Grünschnabel

    Dabei seit:
    05.12.2011
    Beiträge:
    3
    Zustimmungen:
    0
    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!
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. yai

    yai yet another idiot

    Dabei seit:
    22.01.2007
    Beiträge:
    166
    Zustimmungen:
    0
    Moin,
    die -d option funktioniert bei mir auch nicht ("inavlid date ..."), aber mit --date="2011-11-28 16:30:00" funktionierts.
    Bye,
    yai.
     
  4. #3 VerWurster, 06.12.2011
    VerWurster

    VerWurster Grünschnabel

    Dabei seit:
    05.12.2011
    Beiträge:
    3
    Zustimmungen:
    0
    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 ... ;-)
     
  5. #4 HeadCrash, 06.12.2011
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
  6. #5 Remidemi, 06.12.2011
    Remidemi

    Remidemi Routinier

    Dabei seit:
    17.03.2008
    Beiträge:
    352
    Zustimmungen:
    0
    Ort:
    Südpfalz
    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
    
    
     
  7. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  8. #6 Remidemi, 06.12.2011
    Remidemi

    Remidemi Routinier

    Dabei seit:
    17.03.2008
    Beiträge:
    352
    Zustimmungen:
    0
    Ort:
    Südpfalz
    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
    
     
  9. #7 VerWurster, 08.12.2011
    VerWurster

    VerWurster Grünschnabel

    Dabei seit:
    05.12.2011
    Beiträge:
    3
    Zustimmungen:
    0
    Jau, danke!

    Genau dieses hier hatte ich nicht im Schädel:

    Der Tag ist gerettet!
     
Thema: awk + datumberechnung
Besucher kamen mit folgenden Suchen
  1. awk datum