2016-05-18 59 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

相關問題