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

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von rudiratlosde, 23.10.2012.

  1. #1 rudiratlosde, 23.10.2012
    rudiratlosde

    rudiratlosde Grünschnabel

    Dabei seit:
    23.02.2011
    Beiträge:
    8
    Zustimmungen:
    0
    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
     
  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. #2 tgruene, 23.10.2012
    tgruene

    tgruene Routinier

    Dabei seit:
    02.02.2012
    Beiträge:
    418
    Zustimmungen:
    0
    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
     
  4. #3 rudiratlosde, 23.10.2012
    rudiratlosde

    rudiratlosde Grünschnabel

    Dabei seit:
    23.02.2011
    Beiträge:
    8
    Zustimmungen:
    0
    Leider gehts nicht so einfach...

    Zuerst DANKE für die schnelle Antwort!

     
  5. #4 tgruene, 23.10.2012
    tgruene

    tgruene Routinier

    Dabei seit:
    02.02.2012
    Beiträge:
    418
    Zustimmungen:
    0
    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 ;-)
     
  6. #5 rudiratlosde, 23.10.2012
    rudiratlosde

    rudiratlosde Grünschnabel

    Dabei seit:
    23.02.2011
    Beiträge:
    8
    Zustimmungen:
    0
    Ja , das ist GNU sed version 4.2.1 auf einem Win7 PC
     
  7. #6 tgruene, 24.10.2012
    tgruene

    tgruene Routinier

    Dabei seit:
    02.02.2012
    Beiträge:
    418
    Zustimmungen:
    0
    Da kann ich Dir leider nicht erklaeren, wo diese Sonderzeichen herkommen. google?
     
  8. #7 Spröde, 24.10.2012
    Spröde

    Spröde Alter Sack

    Dabei seit:
    22.01.2012
    Beiträge:
    173
    Zustimmungen:
    0
    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...
     
  9. #8 rudiratlosde, 24.10.2012
    rudiratlosde

    rudiratlosde Grünschnabel

    Dabei seit:
    23.02.2011
    Beiträge:
    8
    Zustimmungen:
    0
    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....
     
  10. #9 tgruene, 24.10.2012
    tgruene

    tgruene Routinier

    Dabei seit:
    02.02.2012
    Beiträge:
    418
    Zustimmungen:
    0
    gibt's, heisst 'sort' ;-)
    Code:
     sort -t; -k4 dateiname
     
  11. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  12. #10 rudiratlosde, 24.10.2012
    rudiratlosde

    rudiratlosde Grünschnabel

    Dabei seit:
    23.02.2011
    Beiträge:
    8
    Zustimmungen:
    0
    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
     
  13. #11 Hobbystern, 29.10.2012
    Hobbystern

    Hobbystern Wahl-Debianer

    Dabei seit:
    02.02.2007
    Beiträge:
    186
    Zustimmungen:
    0
    Ort:
    westl. Ruhrgebiet
    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
     
Thema: Datum innerhalb einer Datei wandeln dd.mm.jjjj auf jjj-mm-dd
Besucher kamen mit folgenden Suchen
  1. sed datum in datei

Die Seite wird geladen...

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

  1. Prüfen ob ein Datum innerhalb letzten 2 Wochen liegt

    Prüfen ob ein Datum innerhalb letzten 2 Wochen liegt: Hallo, ich bräuchte eine Funktion die prüft ob ein Datum im Format tt.mm.JJJJ innerhalb der letzten 2 Wochen liegt. Oder anders ausgedruckt, ob...
  2. Shell-Skript Datum in einer Datai suchen

    Shell-Skript Datum in einer Datai suchen: Hallo zusammen Ich komm eigentlich aus der Klicki-Bunti-Welt von Windows. Seit geraumer Zeit versuche ich meine Künste mit verschiedenen...
  3. Wie kann ich im AIX x Tage vom Datum subtrahieren ?

    Wie kann ich im AIX x Tage vom Datum subtrahieren ?: Für ein Skript unter AIX brauche ich einen Code, der mir vom aktuellen Datum 7 Tage abzieht und das Datum im gewünschten Format ausgibt. Hat...
  4. Wie filtere ich nach Datum um Files zu löschen

    Wie filtere ich nach Datum um Files zu löschen: Ich möchte alle *.sql Dateien löschen die älter als 20 Tage sind. Die Verbindung mache ich von einem RedHat auf eine Windows 2008 Server....
  5. Dateien nach Datum finden

    Dateien nach Datum finden: Hallo zusammen, ich würde gerne Wissen wie ich am einfachsten Dateien nach einem bestimmten Datum in einem Verzeichnis suchen kann. Das...