2017-09-12 4 views
0

Mein LogFile:Konvertieren von Timestamp LogFile

created_at,entry_id,field1 
2017-09-08 13:21:12 UTC,69,39.00 
2017-09-08 14:20:03 UTC,70,42.00 
2017-09-08 15:18:32 UTC,71,43.00 
2017-09-08 16:16:59 UTC,72,44.00 
2017-09-08 17:15:53 UTC,73,44.00 

Ich mag würde das Logfile neu zu schreiben, die Timestamp von UTC in GMT +2, konvertieren und die , mit Tabs ersetzen.

Was ist der beste Weg, um den Zeitstempel zu konvertieren und ersetzen c mit bash?

+1

Mit GNU-Datum: 'TZ = UTC Datum -d '2017-09-08 13:21:12 UTC + 2 Stunden" + "% Y-% m-% d% T% Z" ' – Cyrus

+0

Vielen DankI'm versuchen, während IFS =, lesen col1 col2 und konvertieren col1 mit dem timestamp –

+0

@Cyrus, nach dem Hinzufügen von 2 Stunden, ich würde raten, die OP nicht mehr will die Zeitzone als "UTC" ausgedruckt –

Antwort

2

Eine mögliche Implementierung:

#!/bin/bash 

while IFS=, read c1 c2 c3; do 
    if [[ $c1 == "created_at" ]]; then echo -e "$c1\t$c2\t$c3"; continue; fi 
    TZ=UTC date -d "$c1 +2hours" +"%Y-%m-%d %T"$'\t'"$c2"$'\t'"$c3" 
done < file 

Ausgang:

 
created_at  entry_id  field1 
2017-09-08 15:21:12  69  39.00 
2017-09-08 16:20:03  70  42.00 
2017-09-08 17:18:32  71  43.00 
2017-09-08 18:16:59  72  44.00 
2017-09-08 19:15:53  73  44.00 

Nachteil: langsam

1

quick and dirty:

perl -MTime::Piece -F, -ane ' 
    if ($. > 1) { 
     $t = Time::Piece->strptime($F[0], "%Y-%m-%d %T UTC"); 
     $F[0] = ($t + 7200)->strftime("%Y-%m-%d %T+02:00"); 
    } 
    print join "\t", @F 
' file 

Wenn ich dies ein wenig tun wollte robuster und verwenden, um eine Olson Zeitzone Sommerzeit zu handhaben, würde ich nicht-Core-Module verwenden und zu tun:

perl -MDateTime::Format::Strptime -F, -sane ' 
    BEGIN { 
    $fmt = "%F %T %Z"; 
    $p = DateTime::Format::Strptime->new(pattern => $fmt, time_zone => "UTC"); 
    } 
    if ($. > 1) { 
    $t = $p->parse_datetime($F[0]); 
    $F[0] = $t->set_time_zone($dest_tz)->strftime($fmt); 
    }               
    print join "\t", @F 
' -- -dest_tz="Europe/Paris" file 
created_at entry_id field1 
2017-09-08 15:21:12 CEST 69 39.00 
2017-09-08 16:20:03 CEST 70 42.00 
2017-09-08 17:18:32 CEST 71 43.00 
2017-09-08 18:16:59 CEST 72 44.00 
2017-09-08 19:15:53 CEST 73 44.00 

Passen Sie Ihre Zielzeitzone anpassen.

Verwandte Themen