为什么排序使用相同的排序键来更改行的顺序?


31

数据如下:

D 2
B 2
A 2

当我运行此命令时:

sort -k2,2 file

它输出:

A 2
B 2
D 2

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


7
[Semi-OT]:FYI,一种在排序键匹配时保留输入顺序的排序在计算机科学中被称为稳定排序。排序通常不稳定,因为许多非稳定排序算法更快或更简单。这里不是这种情况,但是了解CS术语会使该-s选项的联机帮助文档变得可理解和可找到。
derobert

Answers:


34

那是不得已的比较。比较两行时,如果所有键的比较都相等,则作为最后的选择,将对整行进行基本的字符串比较(-r仍然适用,但其他选项无效)。该行为由POSIX指定:

除非指定了-u选项,否则应该比较相等的行应按顺序排序,就好像没有选项-d,-f,-i,-n或-k一样(但如果-r仍然有效,则如果(已指定),并且所有行中的所有字节均对比较有效。未指定仍比较相等的行的写入顺序不确定。

使用GNU时sort,可以使用-s(for stable)选项禁用最后查询比较。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.