Estoy usando unix sort para ordenar un archivo delimitado por comas con múltiples columnas. Hasta ahora, esto ha funcionado perfectamente para ordenar los datos numéricamente o en orden alfabético:
Archivo de ejemplo antes de cualquier clasificación:
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
Ordenar el archivo: $ sort -t ',' -k 2,2 -k 3,3 -k 4,4 -k 5,5r -k 6,6nr tmp.csv
Resultado ordenado:
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
Aquí está el problema: quiero ordenar la columna 2 según un orden personalizado, lo que significa que quiero primero a Estados Unidos, luego a Canadá y luego a Bahamas:
Tipo deseado:
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
¿Hay alguna forma de pasar unix sort a un orden de clasificación personalizado que luego pueda aplicar? 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
¡Gracias!
t
lugar de f
en la última línea?
join
comando, pero podría terminar con una gran cantidad de clasificación: los archivos de entradajoin
deben clasificarse en un orden, y luego volvería a usarlossort
para colocar los datos en un orden diferente (y perder la columna de orden de clasificación como un paso posterior a la clasificación).