sort 是文本處理核心工具,支援多欄位、多鍵值、數值/字典序混合排序。本文系統整理參數語法與實戰範例。
sort [選項] [檔案...]
# 預設: 以 ASCII 碼值由左至右字典序排序
# 欄位分隔符預設為空白 (空格/Tab 連續視為一個)
| 參數 | 功能 |
|---|---|
-u, --unique | 去除重複行 (輸出唯一行) |
-r, --reverse | 反向排序 |
-n, --numeric-sort | 數值排序 (而非字典序) |
-f, --ignore-case | 忽略大小寫 |
-t CHAR | 指定欄位分隔符 (預設空白) |
-k KEYDEF | 指定排序鍵值範圍 |
-s, --stable | 穩定排序 (保持相等鍵值原序) |
-o FILE | 輸出至檔案 (可同輸入檔) |
-k FStart[.CStart][Modifier] [, FEnd[.CEnd][Modifier]]
# FStart: 起始欄位號 (1-based)
# CStart: 起始欄位內字元位置 (1-based)
# FEnd/CEnd: 結束欄位/字元 (省略 = 行尾/欄位尾)
# Modifier: n(數值) r(反向) f(忽略大小寫) b(忽略前導空白) M(月份) h(人類可讀數值) V(版本號)
sort -u file.txt # 去重
sort -r file.txt # 反向字典序
sort -ru file.txt # 反向去重
echo -e "10\n2\n1\n20" | sort -n
# 1
# 2
# 10
# 20
# /etc/passwd 以 : 分隔,按第 3 欄 UID 數值排序
sort -t: -k3,3n /etc/passwd
# CSV 按第 2 欄日期、第 1 欄名稱排序
sort -t, -k2,2 -k1,1 data.csv
# facebook.txt 格式: 名稱 年齡 分數
# 第 2 欄第 2 字元 到 第 3 欄第 1 字元 數值排序
# 第 1 欄 反向字典序
sort -n -k 2.2,3.1 -k 1,1r facebook.txt
echo -e "1.10\n1.2\n1.1\n2.0" | sort -V
# 1.1
# 1.2
# 1.10
# 2.0
du -h | sort -k1,1h
# 4K
# 8M
# 1G
echo -e "Dec\nJan\nFeb" | sort -k1,1M
# Jan
# Feb
# Dec
sort -S 1G -T /tmp/bigsort bigfile.txt (指定記憶體緩衝、臨時目錄)sort --parallel=4 bigfile.txt (多核心加速)sort -R (雜湊基礎偽隨機)sort -m sorted1.txt sorted2.txt (極快,不重新排序)sort -c file.txt (已排序退出碼 0,否則 >0)
sort file.txt | uniq -c | sort -rn
# 統計行出現次數並按頻率降序 (常用於日誌分析)
掌握 sort -k 多鍵值語法與修飾符,能處理 90% 以上文本排序需求,是資料前處理與日誌分析的基石技能。