当排序在下面的输入文件中对于给定选项不执行任何操作时,为什么会更改第二行和第三行?
$ cat test1
1 4
2 5
2 1
3 6
$ sort -n -k 1,1 test1
1 4
2 1
2 5
3 6
答案1
这是最后的比较方法,当它们根据排序键规范进行同等比较时,按词法比较整行。
通过 GNU 实现sort
,您可以添加-s
选项来禁用最后的比较。 GNUsort
排序算法是稳定的,您将在输入中获得原始顺序,因此:
sort -s -n -k1,1
要不就:
sort -sn
(由于比较的是数字,所以无论是整行还是第一个字段转换为数字进行比较都没有什么区别)。
答案2
使用调试选项运行。第一个下划线为主排序,接下来的为辅助排序
sort -n -k1,1 --debug test1
sort: text ordering performed using simple byte comparison
1 4
_
___
2 1
_
___
2 5
_
____
3 6
_
___
请注意,第二个下划线从第一个字段开始!
为了更容易理解,你可以这样理解:
1 (1 4)
2 (2 1)
2 (2 5)
3 (3 6)