2011-06-14 116 views
15

我想文件排序如下如下:UNIX排序多個字段

COL1(升序)COL2(降序)COL3(升序)COL4(降序)

我想用-k命令,而不是+-語法。 我已經想通了如何使用舊的語法:

sort -t " " +0 -1 +2 -3 +4r testfile 

,但它很難直觀。 我還沒有想出使用-k選項的正確方法。謝謝。

這裏的testfile的:

5 3 2 9 
3 4 1 7 
5 2 3 1 
6 1 3 6 
1 2 4 5 
3 1 2 3 
5 2 2 3 

結果:

1 2 4 5 
3 4 1 7 
3 1 2 3 
5 3 2 9 
5 2 2 3 
5 2 3 1 
6 1 3 6 
+0

你的「結果」數據舊語法示例的輸出不匹配。 – blahdiblah 2011-06-14 01:39:25

回答

26

您需要的一個:

sort --key=1,1 --key=2,2r --key=3,3 --key=4,4r 
sort -k1,1 -k2,2r -k3,3 -k4,4r 

如下面的成績單:

pax$ echo '5 3 2 9 
3 4 1 7 
5 2 3 1 
6 1 3 6 
1 2 4 5 
3 1 2 3 
5 2 2 3' | sort --key=1,1 --key=2,2r --key=3,3 --key=4,4r 

1 2 4 5 
3 4 1 7 
3 1 2 3 
5 3 2 9 
5 2 2 3 
5 2 3 1 
6 1 3 6 

記得提供-n選項,如果你想讓他們爲正確的號碼(可變長度)處理,如:

sort -n -k1,1 -k2,2r -k3,3 -k4,4r 
0

什麼sort -n -k 1n -k 2rn -k 3n -k 4rn
-k <FIELD><OPT1><OPT2>...,其中OPT1和OPT2只是sort選項,例如n是數字,r是反向