2016-05-18 80 views
1

我试图排序第一列中的文件进行排序,不改变第二列的排列顺序,如果第一列具有相同的值,何时以及为什么需要一个“S”标志被列

$ cat test 
1 4 
1 3 
1 2 
1 1 
3 3 
2 1 
2 2 
2 3 

愿望输出:

1 4 
1 3 
1 2 
1 1 
2 1 
2 2 
2 3 
3 3 

只有当我使用sort test -s -k1,1这项工作。

下面的所有更改第二列的顺序:

sort test 
sort test -k1 
sort test -k1,1 
sort test -s -k1 

1 1 
1 2 
1 3 
1 4 
2 1 
2 2 
2 3 
3 3 

为什么我需要与-k1,1一起使用-s

回答

2

man sort

-s,--stable 稳定排序通过禁用最后手段比较

换句话说,如果sort发现两行具有相同的键,它会比较整个行来对它们进行排序。您最后与-s进行了比较,因此您保留原始订单。

https://en.wikipedia.org/wiki/Sorting_algorithm#Stability

+0

那么-k1,1和-k1的区别是什么? – once

+0

@once'-k'允许你定义'sort'所使用的键的位置,即'-k start,end'。 '-k1,1'表示“仅使用键作为第一个字段的键”,-k1'表示“使用键作为键从第一个字段到行尾的子行”,因为默认停止位置是队伍的尽头。这就是为什么在你的例子中你需要'-k1,1'而不是'-k1'。我建议你阅读'sort'手册:http://man7.org/linux/man-pages/man1/sort.1.html –

+0

我阅读两个标志的手册,只是不能清楚为什么事情不起作用当使用-k1,1“使用只作为键的第一个字段进行排序”时,仍然需要为这种情况添加-s稳定标志 – once

相关问题