Unix sort命令默认排序逻辑是什么?为何数值行出现反常排序顺序
Unix
sort 命令默认排序结果异常的底层逻辑 你观察到的排序结果是Unix sort 命令默认规则的正常表现,核心逻辑分为两点:
- 默认执行字典序排序而非数值排序:不会把行首的node_number解析为整数做大小比较,而是逐字符按排序权重对比
- 默认使用当前系统locale的 collation 排序规则:绝大多数常用locale(如en_US.UTF-8、zh_CN.UTF-8等)的规则中,逗号、点号等标点符号的排序权重远低于数字字符,比较时会优先匹配数字序列,数字序列完全一致时才会对比标点的位置和ASCII值
接下来拆解你给出的三行关键内容的比较过程:
待比较的三行内容分别为:
- 行X:
100009,0.000000 - 行Y:
1000090,0.000000 - 行Z:
100009,0.050510
行X和行Y的比较逻辑
首先提取两行的所有数字字符,忽略标点后得到的数字序列分别为:
- 行X数字序列:
1000090000000 - 行Y数字序列:
1000090000000
两者数字序列完全一致,此时开始对比标点的位置:行X的逗号出现在第7位,行Y的逗号出现在第8位,逗号出现位置更早的行排序优先级更高,因此行X排在行Y之前。
行Y和行Z的比较逻辑
同样先提取忽略标点的数字序列:
- 行Y数字序列:
1000090000000 - 行Z数字序列:
1000090050510
逐位对比数字序列,前8位均为10000900,第9位行Y是0,行Z是5,0的排序优先级高于5,因此行Y排在行Z之前。
最终就得到了你看到的 X → Y → Z 的排序结果,和预期的数值排序结果存在差异。
内容的提问来源于stack exchange,提问作者Hari Raagav T R
相关产品推荐
相关产品推荐

