2015-02-09 88 views
-1

我的輸入文件如下。在Linux中排序2列

A 0
A 2
的C 2
乙11
的C 5
d 7
乙3

我希望我的輸出成爲像以下。請在Linux中使用SORT命令來幫助我。

謝謝。

乙11
乙3
d 7
的C 5
的C 2
A 2
A 0

第二列首先被排序,然後第一列被佈置。

+0

'sort'是可怕的任意訂單。 – 2015-02-09 05:23:58

+0

你應該編寫自己的排序。標準的「排序」對定製標準沒有多大幫助。在'python','js'或任何您熟悉的腳本語言中,這應該很容易 – slezica 2015-02-09 05:48:52

回答

2

這是可以做到,但它不漂亮:

for key in $(sort -n -k2 -r <inFile | awk 'ex[$1]==0{print $1;ex[$1]=1}'); do 
    awk -vK=$key '$1==K{print}' <inFile | sort -r -n -k2 
done 

這就是for環路內使用會減少值的順序返回鍵(字母)的列表的命令,並與重複刪除。 sort部分確保所有行都處於縮減值順序(數字,鍵位2,反向順序),而awk僅使用「doesExist」關聯數組ex[]來打印每個鍵的第一個以丟棄後續的鍵。這將爲您提供按順序鍵B,D,C,A

然後,對於每個以該順序這些鍵,它會提取所有從輸入文件數據該鍵,和排序基於所述遞減值的那些。

最終的結果是關鍵集的通過減少最高值和分選內的行,每行鍵設置通過減少值:

B 11 
B 3 
D 7 
C 5 
C 2 
A 2 
A 0