为什么 sort 会改变具有相同排序键的行的顺序?

为什么 sort 会改变具有相同排序键的行的顺序?

这是数据:

D 2
B 2
A 2

当我运行这个命令时:

sort -k2,2 file

它输出:

A 2
B 2
D 2

我的问题是,当我仅指定第二列时-k2,2,为什么它也按第一列排序?由于第二列的所有值都相同,因此应保持原样。

答案1

这就是最后手段比较。比较两行时,如果所有键比较相等,那么作为最后的手段,将对整行执行基本字符串比较(-r仍然适用,但不适用于其他选项)。该行为由POSIX:

除非指定了 -u 选项,否则比较相等的行应按不存在选项 -d、-f、-i、-n 或 -k 的顺序进行排序(但 -r 仍然有效,如果它被指定)并且行中的所有字节对比较都很重要。仍然比较相等的行的写入顺序未指定。

对于 GNU sort,可以使用-s/--stable选项禁用最后的比较。


¹ 因为 GNU 使用的排序算法sort是另外的稳定的,因此禁用最后的比较会导致稳定的排序。

相关内容