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選項,將都相同的纔會刪除,只要其中有一級不同都不會輕易刪除的
本文來自:Linux教程網