sort 是 Linux 文字處理三劍客之一,依 ASCII 碼逐字元比較排序,支援欄位分隔、數值排序、多層次鍵值、去重等功能,是日誌分析、資料清洗的基礎工具。
| 參數 | 功能 |
|---|---|
-u | 唯一輸出(去除重複行) |
-r | 反向排序 |
-n | 數值比較(而非字典序) |
-f | 忽略大小寫 |
-t <字元> | 指定欄位分隔字元(預設空白) |
-k <範圍> | 指定排序鍵值範圍 FStart.CStart,FEnd.CEnd |
-o <檔案> | 輸出至檔案(可覆蓋輸入檔) |
-k FStart.CStart,FEnd.CEndFStart:起始欄位編號(從 1 開始)。CStart:起始欄位內字元位置(從 1 開始,省略為欄位開頭)。FEnd:結束欄位編號(省略為行尾)。CEnd:結束欄位內字元位置(省略為欄位結尾)。n 數值、r 反序、f 忽略大小寫。sort -u filename
sort -r filename
sort -t',' -k2,2n data.csv
sort -t',' -k2,2n -k1,1r data.csv
sort -n -k 2.2,3.1 -k 1,1r facebook.txt
sort -t':' -k3,3n /etc/passwd
sort -f filename
sort -o output.txt input.txt
-s 參數保持相等鍵值的原始相對順序。sort -R(GNU sort 支援)。sort -V 正確處理 1.2.10 > 1.2.9。-S 1G 限制記憶體使用,超過改用暫存檔。--parallel=4 多執行緒加速(大檔案顯著提升)。| 現象 | 原因 | 解決 |
|---|---|---|
| 數字 10 排在 2 前面 | 字典序比較 | 加 -n 數值排序 |
| 欄位對不齊 | 分隔符非單一空白 | 用 -t 指定正確分隔符 |
| -k 範圍不生效 | 欄位編號從 1 非 0 | 確認欄位編號正確 |
sort 看似簡單,但 -k 靈活的欄位範圍與修飾字元組合,能處理極複雜的多層次排序需求。建議搭配 cut、awk、uniq 組成文字處理管線,發揮最大效用。