Birden çok sütunlu virgülle ayrılmış bir dosyayı sıralamak için unix sort kullanıyorum. Şimdiye kadar, bu verileri sayısal olarak veya alfabetik sıraya göre sıralamak için mükemmel bir şekilde çalıştı:
Herhangi bir sıralamadan önce örnek dosya:
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
Dosyayı sırala: $ sort -t ',' -k 2,2 -k 3,3 -k 4,4 -k 5,5r -k 6,6nr tmp.csv
Sıralanan sonuç:
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
Sorun şu: 2. sütunu özel bir sıralamaya göre sıralamak istiyorum, yani önce Amerika Birleşik Devletleri'ni sonra Kanada’yı sonra Bahamalar’ı istiyorum:
İstenilen sıralama:
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
Unix sorti uygulayabileceği özel bir sıralama düzenini geçmenin bir yolu var mı? Gibi bir şey: $ sort -t ',' -k 2,2:'United States, Canada, Bahamas' -k 3,3 -k 4,4 -k 5,5r -k 6,6nr tmp.csv
Teşekkürler!
t
yerine f
son satırda
join
komut, ancak çok fazla sıralama ile sona erebilir - giriş dosyalarıjoin
tek bir sıraya göre sıralanmalı ve sonrasort
Verileri farklı bir sıraya koymak için (ve bir sıralama sonrası adımı olarak sıralama düzeni sütununu kaybederek) tekrar.