¿Por qué la ordenación cambia el orden de las líneas con claves de ordenación idénticas?


31

Aquí están los datos:

D 2
B 2
A 2

Cuando ejecuto este comando:

sort -k2,2 file

produce:

A 2
B 2
D 2

Mi pregunta es que cuando especifico solo la segunda columna -k2,2, ¿por qué se clasifica también por la primera columna? Como todos los valores de la segunda columna son iguales, debería dejarlo como está.


77
[Semi-OT]: FYI, una clasificación que conserva el orden de entrada cuando las claves de clasificación coinciden es conocida en informática como clasificación estable . A menudo, las clasificaciones no son estables, porque muchos algoritmos de clasificación no estables son más rápidos o más simples. No es el caso aquí, pero conocer el término CS hace que los documentos de la página de manual para la -sopción sean comprensibles y fáciles de encontrar.
derobert

Respuestas:


34

Esa es la comparación de último recurso . Al comparar dos líneas, si todas las claves se comparan iguales, entonces, como último recurso, se realiza una comparación de cadena básica de todas las líneas ( -rtodavía se aplica pero no las otras opciones). POSIX especifica ese comportamiento :

Excepto cuando se especifica la opción -u, las líneas que de lo contrario se comparan iguales se ordenarán como si ninguna de las opciones -d, -f, -i, -n o -k estuvieran presentes (pero con -r aún vigente, si se especificó) y con todos los bytes en las líneas significativas para la comparación. El orden en el que se escriben las líneas que todavía comparan igual no está especificado.

Con GNU sort, esa comparación de último recurso se puede deshabilitar con la opción -s(para estable ).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.