[Shell] Sort排序的例子

tolilong發表於2016-03-21
source data
[/tmp/test]# more tt1
50 IT                                         China            800 
10 ACCOUNTING                                 LA               1100
20 RESEARCH                                   DALLAS           560
30 SALES                                      CHICAGO          2800
40 OPERATIONS                                 BOSTON           5500
10 DEVELOPER                                  HOSTON           1300


1.按照第二列排序
[/tmp/test]# sort -t ' ' -k2 tt1
10 ACCOUNTING                                 LA               1100
10 DEVELOPER                                  HOSTON           1300
50 IT                                         China            800 
40 OPERATIONS                                 BOSTON           5500
20 RESEARCH                                   DALLAS           560
30 SALES                                      CHICAGO          2800

2.按照第四列降序排序
[/tmp/test]# cat tt1 | awk '{print $1,$2,$3,$4}' | sort -nrk4 | awk '{printf "%-4s%-20s%-10s%-5s\n",$1,$2,$3,$4}'
40  OPERATIONS          BOSTON    5500 
30  SALES               CHICAGO   2800 
10  DEVELOPER           HOSTON    1300 
10  ACCOUNTING          LA        1100 
50  IT                  China     800  
20  RESEARCH            DALLAS    560 

3,按照第一列升序,第四列降序
[/tmp/test]# cat tt1 | awk '{print $1,$2,$3,$4}' | sort -n -k1 -k4,4nr | awk '{printf "%-4s%-20s%-10s%-5s\n",$1,$2,$3,$4}'
10  DEVELOPER           HOSTON    1300 
10  ACCOUNTING          LA        1100 
20  RESEARCH            DALLAS    560  
30  SALES               CHICAGO   2800 
40  OPERATIONS          BOSTON    5500 
50  IT                  China     800 

4.按第四列的第二個字元之後的數字排序
[/tmp/test]# cat tt1 | awk '{print $1,$2,$3,$4}' | sort -t ' ' -nk4.2 | awk '{printf "%-4s%-15s%-10s%-5s\n",$1,$2,$3,$4}'   --需要加上 -t ' ',不加上不行,鬱悶
50  IT             China     800  
20  RESEARCH       DALLAS    560  
10  ACCOUNTING     LA        1100 
10  DEVELOPER      HOSTON    1300 
40  OPERATIONS     BOSTON    5500 
30  SALES          CHICAGO   2800 

5.按第二列的第二個字母排序 
[/tmp/test]# cat tt1 | awk '{print $1,$2,$3,$4}' | sort -t ' ' -k2.2,2.2 | awk '{printf "%-4s%-15s%-10s%-6s\n",$1,$2,$3,$4}'    --需要加上 -t ' ',不加上不行,鬱悶
30  SALES          CHICAGO   2800  
10  ACCOUNTING     LA        1100  
10  DEVELOPER      HOSTON    1300  
20  RESEARCH       DALLAS    560   
40  OPERATIONS     BOSTON    5500  
50  IT             China     800  

sort還有很多其他的選項,如果需要檢視具體的使用資訊使用 man sort檢視

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24237320/viewspace-2060704/,如需轉載,請註明出處,否則將追究法律責任。

相關文章