Answers:
原因是因为使用数字排序时,不带数字的字符串被视为零。GNU排序可以使行为正确,但是不对原因进行评论。illumos上用于SunOS排序的手册页确实提供了解释:
-n
将排序键限制为初始数字字符串,该字符串由可选的空白字符,可选的负号,零个或多个数字以及可选的基数字符和数千个分隔符(在当前语言环境中定义)组成,并按算术值排序。 空数字字符串被视为零。前导零和零上的符号不影响排序。
SUSv4和POSIX.1-2008(http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sort.html)中也指定了此行为,使用的方式与illumos手册页相同。
GNU排序还具有-g
“通用数字排序”,它按浮点数而不是整数(其中空数字字符串在零之前排序)进行排序。我不确定这是副作用还是故意的。但是,请-g
附带警告,因为它比慢得多-n
。如果您要对大型数据集进行排序或执行用户正在等待的任何操作,则应避免使用-g
。
sort
处理具有相同密钥的两行。
LC_ALL=C
。