2012-08-13 5 views
12

Ich habe eine CSV-Datei mit Feldern durch ";". Es gibt 8 Felder, und ich möchte meine Daten nach den ersten 4 Spalten sortieren, in aufsteigender Reihenfolge (zuerst sortieren nach Spalte 1, dann Spalte 2 usw.)Bash: Sortieren CSV-Datei von ersten 4 Spalten

Wie kann ich dies über eine Befehlszeile in Linux?

Ich versuchte mit offenen Büro, aber es lässt mich nur 3 Spalten auswählen.

EDIT: unter den Feldern, auf denen ich meine Daten sortieren möchte, enthalten drei Felder Strings mit numerischen Werten, nur Strings. Wie kann ich dies mit dem Befehl sort angeben?

Antwort

20

Versuchen:

sort -t\; -k 1,1n -k 2,2n -k 3,3n -k 4,4n test.txt 

zB:

1;2;100;4 
1;2;3;4 
10;1;2;3 
9;1;2;3 

> sort -t\; -k 1,1n -k 2,2n -k 3,3n -k 4,4n temp3 
1;2;3;4 
1;2;100;4 
9;1;2;3 
10;1;2;3 
+0

Danke. Was bedeutet "1, 1n" hier? –

+0

Sortierung nach Numerisch – Vijay

+0

Oh ok. Also, sagen wir, dass Feld 3 Strings enthält, werde ich '-k 3,3d' machen, um nach Wörterbuchreihenfolge zu sortieren, richtig? –

8

sort -k können Sie den Sortierschlüssel definieren. Von man sort:

-k, --key=POS1[,POS2] 
     start a key at POS1 (origin 1), end it at POS2 (default end of line). 

So

$ sort -t\; -k1,4 

sollte es tun. Beachten Sie, dass ich das Semikolon verlassen habe, da die Shell sonst das Ende der Anweisung interpretiert.

+0

Dank. Sorgt 'sort' auch dafür, für jedes Feld anzugeben, ob ich numerisch oder alphabetisch sortieren möchte? (siehe meine letzte Bearbeitung) –