【標準答案】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.
再強調一遍, -k2 並不是按第2列排序,而是第2列開始,一個到行尾所有內容拿出來排序。