Datum innerhalb einer Datei wandeln dd.mm.jjjj auf jjj-mm-dd

R

rudiratlosde

Grünschnabel
Hallo Leute!
Mein Problem ist das Datumsformat inerhalb einer Textdatei.
Kann man mit "sed" diese Textdateien so ändern, daß ich die Zeilen in diesen Dateien nach Zeit sortieren kann?
Beispiel:

12;52;1;30.12.2005 11:11:56;-344.031250 -> 12;52;1;2005-12-30 11:11:56;-344.031250

von dd.mm.jjjj nach jjjj-mm-dd vom "."zum "-"
Diese Dateien haben bis zu 800000 Zeilen!
Damit habe ich die Basis für eine datumsmäßige Sortierung innerhalb der Datei geschaffen. (geht das auch?)
Um die Daten später in Excel zeitlich auswerten zu können, muss ich sie noch auf 65000 Zeilen splitten. (Wie geht das?)
Dazu müssen diese aber vorher zeitlich sortiert sein.
Den Kommapunkt in Beistrich zu wandeln bringe ich selbst gerade noch zusammen. (damit hätte ich eine fertige CSV-Datei)

Hier einige Beispiele der Dateiinhalte:

14;274;1;10.09.2007 06:11:37;-0.016724
12;70;1;10.02.2008 17:06:50;-6.200684
12;70;1;16.09.2005 21:28:33;4.820068
12;52;1;30.12.2005 11:11:56;-344.031250
12;52;1;30.12.2005 11:12:10;344.765625
14;274;1;10.09.2007 06:11:37;-0.016724
14;274;1;10.09.2007 06:13:57;0.001099
1;2723;1;07.12.2005 00:15:24;2.617999
1;2798;1;16.11.2006 10:15:09;0.000000
1;2798;1;16.11.2006 10:22:00;2730.000000
11;83;1;04.10.2007 16:29:12;112.453125
11;571;1;05.10.2007 00:24:18;0.000000
11;1790;1;05.10.2007 00:24:18;0.114258
11;571;1;05.10.2007 00:24:19;0.000000
11;1790;1;05.10.2007 00:24:19;0.114258
4;985;1;03.03.2008 13:21:39;-42178.000000
4;985;1;03.03.2008 13:21:59;43940.000000
1;3165;1;18.03.2008 06:14:33;17831.906250
7;24087;3;23.09.2006 14:45:44;66273.841667
7;24188;2;22.09.2006 17:00:00;0.232480
7;24188;2;22.09.2006 19:00:00;0.229448
6;57;1;01.10.2006 13:59:38;5.734375
6;24003;3;30.09.2006 15:53:23;74071.162500

Die vorangestellten 3 Werte vor dem Datum müssen bestehen bleiben.

Herzlichen Dank im Voraus
 
Wenn das Format strikt so ist, muesste dies funktionieren:
Code:
sed -e "s/\(.*\)\(..\)\.\(..\)\.\(....\)\(.*\)/\1\4-\3-\2\5/g" test.text
Zum Aufteilen:
Code:
split -l65000 dateiname
 
Leider gehts nicht so einfach...

Zuerst DANKE für die schnelle Antwort!

Wenn das Format strikt so ist, muesste dies funktionieren:
Code:
sed -e "s/\(.*\)\(..\)\.\(..\)\.\(....\)\(.*\)/\1\4-\3-\2\5/g" test.text

meine Eingabe: sed -e "s/\(.*\)\(..\)\.\(..\)\.\(....\)\(.*\)/\1\4-\3-\2\5/g" Quelle.txt > test.csv

das kommt raus...
12;70;1;15.09.2007 01:17:51;6.435059
਍㄀㈀㬀㜀 㬀㄀㬀㄀㔀⸀ 㤀⸀㈀  㜀  ㄀㨀㈀㜀㨀㄀㤀㬀㘀⸀㐀 ㈀㄀  ഀഀ
12;70;1;15.09.2007 01:30:37;6.464355
਍㄀㈀㬀㜀 㬀㄀㬀㄀㔀⸀ 㤀⸀㈀  㜀  ㄀㨀㌀㐀㨀㌀㜀㬀㘀⸀㐀㈀㌀㌀㐀 ഀഀ
12;70;1;15.09.2007 01:40:45;6.476318
਍㄀㈀㬀㜀 㬀㄀㬀㄀㔀⸀ 㤀⸀㈀  㜀  ㄀㨀㐀㐀㨀㈀㜀㬀㘀⸀㐀㌀㄀㌀㤀㘀ഀഀ
12;70;1;15.09.2007 01:47:05;6.480713
਍㄀㈀㬀㜀 㬀㄀㬀㄀㔀⸀ 㤀⸀㈀  㜀  ㄀㨀㐀㤀㨀㐀㄀㬀㘀⸀㐀㄀㠀㐀㔀㜀ഀഀ
12;70;1;15.09.2007 01:52:53;6.464355
਍㄀㈀㬀㜀 㬀㄀㬀㄀㔀⸀ 㤀⸀㈀  㜀  ㈀㨀 㘀㨀 㔀㬀㘀⸀㐀㄀㠀㐀㔀㜀ഀഀ

Ich verwende GNU Verion 4.2.1
 
Code:
tg@slartibartfast:~$ sed --version
GNU sed version 4.2.1
Kommt die Datei vielleicht von einem Windows-Rechner und enthaelt Windows statt Unix newlines? Sed erfindet in der Regel keine neuen Zeichen ;-)
 
Ja , das ist GNU sed version 4.2.1 auf einem Win7 PC
 
Da kann ich Dir leider nicht erklaeren, wo diese Sonderzeichen herkommen. google?
 
Ach du liebe Güte: Mein Opera zeigt die Sonderzeichen noch nicht mal an, ich bekomme sie erst im Konqueror zu sehen. Vielleicht sollte man noch zwei Filter davor setzen:
Code:
sed -e "s|\r$||" Quelle.txt | recode ISO-8859-15 | sed -e "s/\(.*\)\(..\)\.\(..\)\.\(....\)\(.*\)/\1\4-\3-\2\5/g" > test.csv

Das ist aber nur ein Schuss ins Blaue und wird vielleicht nur auf Linux funktionieren. Mal ein Live-Linux (z.B. Knoppix) einsetzen...
 
Danke Jungs!

Habe inzwischen einige Tests gemacht...

Es geht einfach nicht mit einer Dos-Datei (CR/LF)

Habe mit Knoppix das ganze versucht -> (CR/LF) zerstört die SED Ausgabe.

Ich muss die Dateien zuerst konvertieren, dann funktioniert die Ausgabe!



Neue Frage: Gibt es einen Sort-Befehl, der den Dateiinhalt sortiert?

Ich habe Dateien mit 6 Mio Zeilen....
 
gibt's, heisst 'sort' ;-)
Code:
 sort -t; -k4 dateiname
 
Danke Danke Danke

Ich habe eine Lösung für die oben genannten Fehler gefunden.

Die Files sind UTF-8 kodiert nach Umwandeln in ISO 8859-15 spielt ein CR/LF keine Rolle mehr...

Habe mit gedit die Datei geöffnet und Speichern unter...

Leider funktioniert "recode" nicht

aber herzlichen DANK
 
Um das ganze automatiserter zu gestalten kannst Du auch "dos2unix" oder "unix2dos" nutzen - das entfernt die lästigen Sonderzeichen.

Alternativ ist es auch möglich sed eine "-f" Datei zu geben, in dieser markierst Du dann die Sonderzeichen und die zu recht zu ändernden Zeichen (äöü..) - somit hast Du danach eine gängige Datei in allen Systemen...

LG Stefan
 

Ähnliche Themen

Mit AWK verschiedene Felder verschiedener Zeilen vergleichen

Creative Labs SoundBlaster Audigy 2 ZS unter Debian / Kernel 3.16

CSV Datei mit sed manipulieren/optimieren/ergänzen

Prblem mit zeilenweises auslesen von Datei und schreiben nach mysql

Mein Server versendet SPAM in Massen

Zurück
Oben