Tengo un archivo de dos columnas; el archivo está ordenado de la manera que ya lo quiero en la columna 1. Me gustaría ordenar en la columna 2, dentro de cada categoría de la columna 1. Sin embargo, sort
no comprende el orden de clasificación de la columna 1.
La forma normal (de preguntas similares aquí en la pila) sería esta:
sort --stable -k1,1 -k2,2n
Pero no puedo especificar el tipo en k1, porque es arbitrario.
Entrada de ejemplo:
C 2
C 1
A 2
A 1
B 2
B 1
y salida:
C 1
C 2
A 1
A 2
B 1
B 2
seq 30 | xargs -L1 bash -cs 'yes $1 | head -1000000 | paste - <(seq 1000000) | shuf' bash
Podría usar una transformación de Schwartz (esto es básicamente el enfoque de decorar-ordenar-decorar al que aludió en un comentario, pero probablemente más eficaz que la respuesta fina de muru debido al uso de una sola
sort
invocación en lugar de múltiples) - usandoawk
agregar una columna de prefijo que se incrementa con un cambio de valor en la primera columna, ordene por la columna de prefijo seguida de la "segunda" columna (cuya posición ordinal se ha desplazado temporalmente3
debido a la presencia de la columna de prefijo), y finalmente elimine la columna de prefijofuente
awk -v OFS="\t" '$1 != prev { key++ } { print key, $0; prev = $1 }
(no probado).