每天一點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列進行排序。
結果:
可以看到,結果是優先排序第四列,如果第四列相同,會按照第三列進行排序