Używam sortowania unixowego do sortowania pliku rozdzielanego przecinkami z wieloma kolumnami. Do tej pory działało to doskonale do sortowania danych w kolejności numerycznej lub alfabetycznej:
Przykładowy plik przed jakimkolwiek sortowaniem:
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
Sortuj plik: $ sort -t ',' -k 2,2 -k 3,3 -k 4,4 -k 5,5r -k 6,6nr tmp.csv
Posortowany wynik:
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
Oto problem: chcę posortować kolumnę 2 na podstawie sortowania niestandardowego, co oznacza, że najpierw chcę Stany Zjednoczone, potem Kanada, a następnie Bahamy:
Pożądany sort:
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
Czy jest jakiś sposób, aby przekazać sortowanie uniksowe niestandardową kolejność sortowania, którą można zastosować? Coś jak:
$ sort -t ',' -k 2,2:'United States, Canada, Bahamas' -k 3,3 -k 4,4 -k 5,5r -k 6,6nr tmp.csv
Dzięki!
t
zamiast f
w ostatnim wierszu?
join
polecenie, ale możesz skończyć z wieloma sortowaniami - pliki wejściowe dlajoin
muszą być posortowane w jednej kolejności, a następnie będziesz używałsort
ponownie, aby umieścić dane w inna kolejność (i utrata kolumny kolejności sortowania jako krok po sortowaniu).