La razón es porque cuando se usa la ordenación numérica, las cadenas sin números se tratan como cero. GNU sort consigue el comportamiento correcto, pero no hace ningún comentario sobre por qué. La página de manual de illumos para SunOS ofrece una explicación:
-n
Restringe la clave de clasificación a una cadena numérica inicial, que consta de caracteres en blanco opcionales, signo menos opcional y cero o más dígitos con un carácter de raíz opcional y separadores de miles (como se define en la configuración regional actual), que se ordena por valor aritmético . Una cadena de dígitos vacía se trata como cero. Los ceros a la izquierda y los signos en ceros no afectan el orden.
Este comportamiento también se especifica en SUSv4 y POSIX.1-2008 ( http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sort.html ), utilizando el mismo lenguaje que la página de manual de illumos.
La ordenación GNU también tiene -g
"ordenación numérica general", que ordena por números de coma flotante en lugar de enteros donde las cadenas de dígitos vacías se ordenan antes de cero. No estoy seguro de si esto es un efecto secundario o intencional. Sin embargo, -g
viene con una advertencia ya que es significativamente más lenta que -n
. Si está ordenando un gran conjunto de datos o haciendo algo que los usuarios esperan, debe evitarlo -g
.
LC_ALL=C
.