1. 程式人生 > >每天一點linux命令 sort排序

每天一點linux命令 sort排序

命令功能:

通過sort命令可以實現對輸入流或者文字內容進行排序,並將結果輸出。

命令語法:

sort  [option]  [file]

命令引數:

引數 說明
-k 指定列,排序會按照此列為基準進行排序
-r 倒序排序
-t 指定排序的分隔符
-h 可以帶單位進行比較,比如2K,3M,4G等等,不需要在轉換成一樣的單位
-u 排序時如果有相同行,會進行合併,把重複行去掉
-n 按照數字的大小進行排序

以上,應該是sort最常使用的幾個引數,其他的引數還有很多,如需使用,可以使用查詢幫助:

man sort  或者 sort --help

命令示例

1、不加引數

sort會按照ASCII碼從第一個字元開始進行比較,第一個字元相同再按照第二個字元、第三個字元…依次論推進行比較。
這裡有一個sort_num檔案進行排序測試,如下:
在這裡插入圖片描述
命令:sort sort_num
結果如下:
在這裡插入圖片描述
這裡18最大卻排在了前面,由於沒加任何引數,18實際上會被當做兩個字元"1"和"8",所以按照ASCII碼的順序,"1"當然比第二行同位置的"4"以及第六行同位置的"5"以及最後一行的"8"小,所以排在前面了。

2、加引數-n:按數字排序

這個引數會把文字按數字進行排序,還是1中的例子:
命令:·sort -n sort_num
在這裡插入圖片描述
這次18排在後面啦!

3、引數-r:倒序排序

這就是順序和沒加引數的sort結果反過來。正常的sort命令是按照ASCII碼順序依次從小往大排,-r就是從大往小排。
命令:sort -r sort_num
在這裡插入圖片描述

4、引數-u:去除重複值:

比如這個sort_num檔案,加引數-u會把包含4的行做去重操作,只保留一個。
在這裡插入圖片描述

5、引數-k:指定要比較的列

預設情況下,如果要比較的資料中有多個列,那麼sort比較預設會比第一列,加-k引數,會按照指定的列進行比較:
如下,:
在這裡插入圖片描述


命令:sort -k 2
在這裡插入圖片描述

6、引數-t:指定分隔符

預設情況下,我們用-k指定列時,列與列之間預設是用空格或者tab鍵隔開的。-t可以指定分隔符為別的符號。比如passwd檔案,我們指定以冒號為分割,按第三列進行比較,如下:
在這裡插入圖片描述

7、-k引數的進階使用

-k引數可以使用多次,按照多列進行排序。
這裡有個文件,如下:
在這裡插入圖片描述我們對這個ip列表用".“分隔,先對第四列排序,然後在對第三列排序。
命令:sort -t . -k 4.1,4.2 -k 3,3 sort_ip
引數解釋:
-t . 以”."為分隔符進行分割
-k 4.1,4.2:先按照第4列進行排序,從第四列的第一個字元到第四列的第二個字元。
-k 3,3按照第3列進行排序。
結果:
在這裡插入圖片描述可以看到,結果是優先排序第四列,如果第四列相同,會按照第三列進行排序