Ich verwende die Unix-Sortierung, um eine durch Kommas getrennte Datei mit mehreren Spalten zu sortieren. Bisher hat dies perfekt funktioniert, um die Daten entweder numerisch oder in alphabetischer Reihenfolge zu sortieren:
Beispieldatei vor dem Sortieren:
C,United States,WA,Tacoma,f,1
A,United States,MA,Boston,f,0
B,United States,NY,New York,f,5
A,Canada,QC,Montreal,f,2
A,Bahamas,Bahamas,Nassau,f,2
A,United States,NY,New York,f,1
Sortieren Sie die Datei: $ sort -t ',' -k 2,2 -k 3,3 -k 4,4 -k 5,5r -k 6,6nr tmp.csv
Sortiertes Ergebnis:
A,Bahamas,Bahamas,Nassau,f,2
A,Canada,QC,Montreal,f,2
A,United States,MA,Boston,f,0
B,United States,NY,New York,f,5
A,United States,NY,New York,f,1
C,United States,WA,Tacoma,f,1
Hier ist das Problem: Ich möchte Spalte 2 nach einer benutzerdefinierten Sortierung sortieren, dh ich möchte zuerst die USA, dann Kanada und dann die Bahamas:
Gewünschte Sorte:
A,United States,MA,Boston,f,0
B,United States,NY,New York,f,5
A,United States,NY,New York,f,1
C,United States,WA,Tacoma,f,1
A,Canada,QC,Montreal,f,2
A,Bahamas,Bahamas,Nassau,f,2
Gibt es eine Möglichkeit, Unix-Sortierung eine benutzerdefinierte Sortierreihenfolge zu übergeben, die dann angewendet werden kann? Etwas wie:
$ sort -t ',' -k 2,2:'United States, Canada, Bahamas' -k 3,3 -k 4,4 -k 5,5r -k 6,6nr tmp.csv
Vielen Dank!
t
statt f
in der letzten Zeile geben?
join
Befehl, aber Sie könnten viel sortieren - die Eingabedateien fürjoin
müssen in einer Reihenfolge sortiert werden, und dann würden Sie siesort
erneut verwenden, um die Daten zu speichern eine andere Reihenfolge (und Verlust der Spalte für die Sortierreihenfolge als Schritt nach der Sortierung).