1. 程式人生 > >【標準答案】sort命令多列排序/複合條件的方法

【標準答案】sort命令多列排序/複合條件的方法

這只是一個小問題,但是假攻略太多了,所有發出真正的答案。

資料如下:

ba 11 a
ab 1 b
aa 1 c
ba 3 d

要求:先按第一列排序,如果重複,再按第2列以數字方式排序

先看一下非常容易百度出來的錯誤答案:

第一條:   並列引數, 也就是 sort -k1 -k2n file,輸出如下,錯誤:

aa 1 c
ab 1 b
ba 11 a
ba 3 d
第二條:   同上,後面發現了問題,但是給出了錯誤的解釋

第三條: 答案是對的,但沒解釋,sort -k1,1 -k2,2n file,輸出如下:

aa 1 c
ab 1 b
ba 3 d
ba 11 a

再後面對錯都有了。所以請記住要長記性,此處省略……

正解及原因:

        答案是:sort -k1,1 -k2,2n file

         原因很簡單,只要man sort一下看一下說明就行了:

KEYDEF  is  F[.C][OPTS][,F[.C][OPTS]] for start and stop position, where F is a field number and C a character position in the field; both are origin 1, and
       the stop position defaults to the line's end.  If neither -t nor -b is in effect, characters in a field are counted from  the  beginning  of  the  preceding
       whitespace.  OPTS is one or more single-letter ordering options [bdfgiMhnRrV], which override global ordering options for that key.  If no key is given, use
       the entire line as the key.

      說的很清楚了,-k的引數是一對,開始和結束,如果未指定結束,則預設是行尾,不是欄位結束。其他人錯誤原因是:如果欄位等長,且測試欄位相鄰,未指定數字等,會導致一些巧合現象。

       再強調一遍, -k2 並不是按第2列排序,而是第2列開始,一個到行尾所有內容拿出來排序。