Причина в том, что при использовании числовой сортировки строки без чисел рассматриваются как ноль. Сортировка GNU правильно определяет поведение, но не комментирует почему. Справочная страница по иллюминаторам для сортировки SunOS дает объяснение:
-n
Ограничивает ключ сортировки исходной числовой строкой, состоящей из необязательных пустых символов, необязательного знака минус и нуля или более цифр с необязательным разделительным знаком и разделителями тысяч (как определено в текущей локали), который сортируется по арифметическому значению , Пустая строка цифр рассматривается как ноль. Ведущие нули и знаки нулей не влияют на порядок.
Это поведение также указано в SUSv4 и POSIX.1-2008 ( http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sort.html ), используя то же словоблудие, что и на man-странице illumos.
У сортировки GNU также есть -g
«общая числовая сортировка», которая сортирует по числам с плавающей запятой вместо целых, где строки пустых цифр сортируются до нуля. Я не уверен, является ли это побочным эффектом или намеренным. Тем не менее, -g
приходит с предупреждением, так как это значительно медленнее, чем -n
. Если вы сортируете большой набор данных или делаете что-то, чего ждут пользователи, вам следует избегать -g
.
LC_ALL=C
.