2017-07-11 99 views
1

這裏排序由多個列的文件是我與使用bash排序

word01.2 10 25 
word01.2 30 50 
word01.1 10 30 
word01.1 40 50 
word01.2 40 50 
word01.1 10 20 
word01.1 5 8 

工作文件當我嘗試我的sort命令

sort -k1,1 -k2,2 -k3,3 file.txt 

我收到以下;我不明白爲什麼2號線和1號線不排序,他們應該在反向位置

word01.1 10 30 
word01.1 10 20 
word01.1 40 50 
word01.1 5 8 
word01.2 10 25 
word01.2 30 50 
word01.2 40 50 

當我嘗試-g添加到排序,排序的文件還有更多的問題,第1欄是沒有再排序

sort -k1,1 -gk2,2 -gk3,3 file.txt 
word01.1 5 8 
word01.1 10 20 
word01.2 10 25 
word01.1 10 30 
word01.2 30 50 
word01.1 40 50 
word01.2 40 50 

我想什麼的結果是

word01.1 5 8 
word01.1 10 20 
word01.1 10 30 
word01.1 40 50 
word01.2 10 25 
word01.2 30 50 
word01.2 40 50 
+0

1行和第2 * *應該根據你給的命令是在正確的位置;正如其他人指出的那樣,其他無序行由於以字符串而不是數字排序。 – chepner

回答

3

你錯過了-n/--numeric-sort選項,根據字符串的數值,而不是字典順序排序(在LEA ST爲第二和第三場):

$ sort -k1,1 -k2,2n -k3,3n file.txt 
word01.1 5 8 
word01.1 10 20 
word01.1 10 30 
word01.1 40 50 
word01.2 10 25 
word01.2 30 50 
word01.2 40 50 

請注意,可以提供全球-n標誌,爲數值,或每個鍵的所有字段進行排序。格式爲關鍵的是-k KEYDEF,其中KEYDEFF[.C][OPTS][,F[.C][OPTS]]OPTS是一個或一個以上的訂購選項,像n(數值),r(反向),g(通用數值),h(人數字)等

4

您還可以將字段2-3合併到一個KEYDEF中,例如

$ sort -k1,1 -k2,3n file 

輸出

word01.1 5 8 
word01.1 10 20 
word01.1 10 30 
word01.1 40 50 
word01.2 10 25 
word01.2 30 50 
word01.2 40 50