Saya menggunakan unix sort untuk mengurutkan file yang dibatasi koma dengan beberapa kolom. Sejauh ini, ini telah bekerja dengan sempurna untuk mengurutkan data baik secara numerik atau dalam urutan abjad:
Contoh file sebelum disortir:
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
Sortir file: $ sort -t ',' -k 2,2 -k 3,3 -k 4,4 -k 5,5r -k 6,6nr tmp.csv
Hasil yang diurutkan:
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
Inilah masalahnya: Saya ingin mengurutkan kolom 2 berdasarkan jenis kustom, artinya saya ingin Amerika Serikat dulu, lalu Kanada, lalu Bahama:
Sortir yang diinginkan:
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
Apakah ada beberapa cara untuk lulus unix sort urutan pesanan khusus yang kemudian dapat diterapkan? Sesuatu seperti:
$ sort -t ',' -k 2,2:'United States, Canada, Bahamas' -k 3,3 -k 4,4 -k 5,5r -k 6,6nr tmp.csv
Terima kasih!
t
bukannya f
di baris terakhir?
join
gunakan bahasa scripting ... Satu kemungkinan adalah perintah, tetapi Anda bisa berakhir dengan banyak penyortiran - file input untukjoin
harus diurutkan dalam satu urutan, dan kemudian Anda akan menggunakansort
lagi untuk memasukkan data ke dalam urutan berbeda (dan kehilangan kolom urutan sortir sebagai langkah pasca-sortir).