Use sort
la -k
opción de ordenar por (múltiples) columnas a la vez:
$ sort -k1,1 -k2n input
A 1-2
A 3-4
A 6-8
B 5-9
B 7-10
-k1,1
se ordena por la primera columna primero, luego -k2n
por la segunda¹ numéricamente cuando se vincula la primera columna, de modo que obtiene su salida en el orden que desee: ordenando por el primer elemento de la segunda columna, solo si el primer elemento de la columna es el mismo.
Al ordenar numéricamente, solo examinará el campo hasta que deje de ser un número, por lo que le ofrece una comparación del primer elemento.
Cuando las dos teclas comparan lo mismo, sort
compara las líneas completas léxicamente como una comparación de último recurso. Por ejemplo, en A 1-10
vs A 1-2
, las primeras claves son idénticas ( A
cadena), y la segunda clave también (ambas se tratan como el número 1
), por lo que luego se sort
compara A 1-10
vs A 1-2
léxicamente y la última es mayor como se 2
ordena después 1
. La implementación de GNU sort
tiene una -V
opción o V
indicador de clave para realizar una clasificación de versiones , que es como una comparación léxica, excepto que las secuencias de dígitos decimales dentro de las cadenas se comparan numéricamente, por sort -k1,1 -k2V
lo que se ordenarían A 1-10
después A 1-2
porque 10
un número es mayor que 2
.
¹ técnicamente, -k2
significa la porción de la línea que comienza con el segundo campo (después de la primera transición de un espacio en blanco) y termina al final de la línea, pero con la n
bandera, que equivale a -k2,2n
solo la parte inicial eso constituye un número se considera.