linux sort命令詳解

linux sort命令詳解

功能說明:將文本文件內容加以排序,sort可針對文本文件的內容,以行爲單位來排序。

語  法:sort [-bcdfimMnr][-o<輸出文件>][-t<分隔字符>][+<起始欄位>-<結束欄位>][--help][--verison][文件]

參  數:

 -b   忽略每行前面開始出的空格字符。

 -c   檢查文件是否已經按照順序排序。

 -d   排序時,處理英文字母、數字及空格字符外,忽略其他的字符。

 -f   排序時,將小寫字母視爲大寫字母。

 -i   排序時,除了040至176之間的ASCII字符外,忽略其他的字符。

 -m   將幾個排序好的文件進行合併。

 -M   將前面3個字母依照月份的縮寫進行排序。

 -n   依照數值的大小排序。

 -o<輸出文件>   將排序後的結果存入指定的文件。

 -r   以相反的順序來排序。

 -t<分隔字符>   指定排序時所用的欄位分隔字符。

 +<起始欄位>-<結束欄位>   以指定的欄位來排序,範圍由起始欄位到結束欄位的前一欄位。

 --help   顯示幫助。

 --version   顯示版本信息。 

sort的-u選項

作用很簡單,就是在輸出行中去除重複行。

[root@geralt-workpc ~]# sort A.txt 

apple

gold

iron

orenge

silver

steel

steel

[root@geralt-workpc ~]# sort -u A.txt 

apple

gold

iron

orenge

silver

steel

sort的-r選項

sort默認的排序方式是升序,如果想改成降序,就加個-r就搞定。

[root@geralt-workpc ~]# sort A.txt    

apple

gold

iron

orenge

silver

steel

steel

[root@geralt-workpc ~]# sort -r A.txt  

steel

steel

silver

orenge

iron

gold

apple

sort的-o選項

把排序結果輸出到原文件

[root@geralt-workpc ~]# sort B.txt   

carrot

cookies

gold

orenge

[root@geralt-workpc ~]# sort -r B.txt -o B.txt 

[root@geralt-workpc ~]# cat B.txt 

orenge

gold

cookies

carrot

sort的-t選項和-k選項

如果有一個文件的內容是這樣:

[root@geralt-workpc ~]# cat facebook.txt

banana:30:5.5

apple:10:2.5

pear:90:2.3

orange:20:3.4

文件有三列,列與列之間用冒號隔開了,第一列表示水果類型,第二列表示水果數量,第三列表示水果價格。

以水果數量來排序,也就是以第二列來排序,如何利用sort實現?

[root@geralt-workpc ~]# sort -n -k 2 -t : facebook.txt

apple:10:2.5

orange:20:3.4

banana:30:5.5

pear:90:2.3

-k選項

[root@geralt-workpc ~]# cat facebook.txt 

google 110 5000

baidu 100 5000

guge 50 3000

sohu 100 4500

假設第一個域是公司名稱,第二個域是公司人數,第三個域是員工平均工資

按公司的字母順序排序

[root@geralt-workpc ~]# sort -t ' ' -k 1 facebook.txt 

baidu 100 5000

google 110 5000

guge 50 3000

sohu 100 4500

按照公司人數排序

[root@geralt-workpc ~]# sort -n -t ' ' -k 2 facebook.txt      

guge 50 3000

baidu 100 5000

sohu 100 4500

google 110 5000

按照公司人數排序,人數相同的按照員工平均工資升序排序

[root@geralt-workpc ~]# sort -n -t ' ' -k 2 -k 3 facebook.txt 

guge 50 3000

sohu 100 4500

baidu 100 5000

google 110 5000

按照員工工資降序排序,如果員工人數相同的,則按照公司人數升序排序

[root@geralt-workpc ~]# sort -n -t ' ' -k 3r -k 2 facebook.txt

baidu 100 5000

google 110 5000

sohu 100 4500

guge 50 3000

從公司英文名稱的第二個字母開始進行排序

[root@geralt-workpc ~]# sort -t ' ' -k 1.2 facebook.txt          

baidu 100 5000

sohu 100 4500

google 110 5000

guge 50 3000

-u選項

[root@geralt-workpc ~]# sort -n -k 2 facebook.txt

guge 50 3000

baidu 100 5000

sohu 100 4500

google 110 5000

[root@geralt-workpc ~]# sort -n -k 2 -u facebook.txt

guge 50 3000

baidu 100 5000

google 110 5000

[root@geralt-workpc ~]# sort  -k 1.1,1.1 -u facebook.txt

baidu 100 5000

google 110 5000

sohu 100 4500

發現-u只識別用-k設定的域,發現相同,就將後續相同的行都刪除。

[root@geralt-workpc ~]#  sort -n -k 2 -k 3 -u facebook.txt

guge 50 3000

sohu 100 4500

baidu 100 5000

google 110 5000

設置了兩層排序優先級的情況下,使用-u就沒有刪除任何行。原來-u是會權衡所有-k選項,將都相同的纔會刪除,只要其中有一級不同都不會輕易刪除的


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章