Estou usando a classificação unix para classificar um arquivo delimitado por vírgula com várias colunas. Até agora, isso funcionou perfeitamente para classificar os dados numericamente ou em ordem alfabética:
Arquivo de exemplo antes de qualquer classificação:
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
Classifique o arquivo: $ sort -t ',' -k 2,2 -k 3,3 -k 4,4 -k 5,5r -k 6,6nr tmp.csv
Resultado classificado:
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
Aqui está o problema: desejo classificar a coluna 2 com base em uma classificação personalizada, o que significa que quero primeiro os Estados Unidos, depois o Canadá e as Bahamas:
Classificação desejada:
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
Existe alguma maneira de passar à ordem do unix uma ordem de classificação personalizada que pode ser aplicada? Algo como:
$ sort -t ',' -k 2,2:'United States, Canada, Bahamas' -k 3,3 -k 4,4 -k 5,5r -k 6,6nr tmp.csv
Obrigado!
t
vez da f
última linha?
join
comando, mas você pode acabar com muita classificação - os arquivos de entradajoin
devem ser classificados em uma ordem e, em seguida, você estaria usandosort
novamente para colocar os dados em uma ordem diferente (e perder a coluna da ordem de classificação como uma etapa de pós-classificação).