gnude
Anmeldungsdatum: 11. Juli 2014
Beiträge: 806
|
Hallo
ich habe eine Textdatei mit folgenden Aufbau: test1;etwastext;30.11.2016;erledigt;
test2;etwasanderes;01.12.2016;erledigt; Nun möchte ich nach dem 3 Feld , also dem Datum sortieren lassen und nutzte dafür den "sort" Befehl.
Der Aufruf sieht wie folgt aus: | sort --field-separator=';' -r -k3 /daten/quelldaten.csv > /daten/zieldaten.csv
|
Hier tritt nun das Problem auf.... wenn der Monat wechselt dann haut er die Sortierung durcheinander.
Gibt es ne Möglichkeit nach so einem Datum in einer csv zu sortieren?
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Du lässt das 3. Feld rein numerisch sortieren ... das macht er auch brav, aber das ist nicht was Du eigentlich willst. Was Du willst, ist eine Sortierung nach Unterfeldern, nämlich zuerst das Jahr, dann den Monat und danach erst den Tag: track@track:~$ echo 'test1;etwastext;30.11.2016;erledigt;
test2;etwasanderes;01.12.2016;erledigt;
test3;etwastext;01.11.2016;erledigt;' | sort -t ';' -r -k3.6,3.9 -k3.4,3.5 -k3.1,3.2
test2;etwasanderes;01.12.2016;erledigt;
test1;etwastext;30.11.2016;erledigt;
test3;etwastext;01.11.2016;erledigt; Wie man sowas genau macht, ist am besten bei den Beispielen in info sort erklärt. LG, track
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17552
Wohnort: Berlin
|
track schrieb: Du lässt das 3. Feld rein numerisch sortieren ... das macht er auch brav, aber das ist nicht was Du eigentlich willst. Was Du willst, ist eine Sortierung nach Unterfeldern, nämlich zuerst das Jahr, dann den Monat und danach erst den Tag: track@track:~$ echo 'test1;etwastext;30.11.2016;erledigt;
test2;etwasanderes;01.12.2016;erledigt;
test3;etwastext;01.11.2016;erledigt;' | sort -t ';' -r -k3.6,3.9 -k3.4,3.5 -k3.1,3.2
test2;etwasanderes;01.12.2016;erledigt;
test1;etwastext;30.11.2016;erledigt;
test3;etwastext;01.11.2016;erledigt; Wie man sowas genau macht, ist am besten bei den Beispielen in info sort erklärt.
Beim destruktiven Versuch zu überprüfen, ob nicht die Interpretation von 09.09.2016 daran scheitert, dass die 09 als ungültige Oktalzahl interpretiert wird (mangels -n wird es wohl gar nicht als Zahl interpretiert) stieß ich auf einen anderen Fehler: | echo 'test1;etwastext;30.11.2015;erledigt;
test2;etwasanderes;01.12.2016;erledigt;
test3;etwastext;09.09.2016;erledigt;' | sort -t ';' -r -k3.6,3.9 -k3.4,3.5 -k3.1,3.2
test2;etwasanderes;01.12.2016;erledigt;
test1;etwastext;30.11.2015;erledigt;
test3;etwastext;09.09.2016;erledigt;
|
Ist aber nur ein profaner off-by-one-error: | echo 'test1;etwastext;30.11.2015;erledigt;
test2;etwasanderes;01.12.2016;erledigt;
test3;etwastext;09.09.2016;erledigt;' | sort -t ';' -r -k3.7,3.10 -k3.4,3.5 -k3.1,3.2
test2;etwasanderes;01.12.2016;erledigt;
test3;etwastext;09.09.2016;erledigt;
test1;etwastext;30.11.2015;erledigt;
|
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
user_unknown schrieb: ... ein profaner off-by-one-error: sort -t ';' -r -k3.7,3.10 -k3.4,3.5 -k3.1,3.2
Oha, ja. - - Danke ! LG, track
|
gnude
(Themenstarter)
Anmeldungsdatum: 11. Juli 2014
Beiträge: 806
|
Danke
Lösung funktioniert!
👍
|