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

dww*_*wdw 33 sort

这是数据:

D 2
B 2
A 2
Run Code Online (Sandbox Code Playgroud)

当我运行此命令时:

sort -k2,2 file
Run Code Online (Sandbox Code Playgroud)

它输出:

A 2
B 2
D 2
Run Code Online (Sandbox Code Playgroud)

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

Sté*_*las 41

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

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

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


¹ 因为 GNU 使用的排序算法sort在其他方面是稳定的,因此禁用最后的比较会导致稳定的排序。.