sort 與 uniq 是 Shell 管線中處理結構化文本的黃金搭檔:sort 負責多鍵值、多規則排序,uniq 負責去重與計數。掌握兩者參數組合,能以一行指令完成資料清洗、日誌統計、CSV 分析等任務。本文系統整理參數、排序邏輯、實戰管線範例。
| 參數 | 功能 | 範例 |
|---|---|---|
-n | 數值排序(而非字典序) | sort -n numbers.txt |
-r | 反向排序 | sort -r -n scores.txt |
-u | 去重(相當於 sort | uniq) | sort -u list.txt |
-k | 指定排序鍵:-k 起始[,結束](欄位從 1 起算) | sort -k 2,2 -k 3,3n data.tsv |
-t | 指定欄位分隔符(預設空白) | sort -t',' -k 3 data.csv |
-b | 忽略前導空白 | sort -b -k 2 list.txt |
-f | 忽略大小寫 | sort -f names.txt |
-d | 字典序(僅字母數字空白) | sort -d dict.txt |
-M | 月份排序(JAN < FEB...) | sort -M -k 2 logs.txt |
-V | 版本號排序(1.2.10 > 1.2.9) | sort -V versions.txt |
-o | 輸出至檔案(可覆蓋輸入檔) | sort -o sorted.txt input.txt |
-c | 檢查是否已排序,否則報錯 | sort -c sorted.txt |
-m | 合併已排序檔案(不重新排序) | sort -m part1.txt part2.txt |
-S | 設定記憶體緩衝區大小(如 -S 50%、-S 1G) | sort -S 50% bigfile.txt |
--parallel=N | 並行排序執行緒數 | sort --parallel=4 bigfile.txt |
-z | 以 NUL (\0) 分隔行(配合 find -print0) | find . -print0 | sort -z |
| 參數 | 功能 | 範例 |
|---|---|---|
-c | 行首顯示出現次數 | sort file | uniq -c |
-d | 僅顯示重複行 | sort file | uniq -d |
-u | 僅顯示唯一行(不重複) | sort file | uniq -u |
-i | 忽略大小寫比較 | sort -f file | uniq -i |
-f N | 忽略前 N 個欄位 | sort file | uniq -f 1 |
-s N | 忽略前 N 個字元 | sort file | uniq -s 10 |
-w N | 比較前 N 個字元 | sort file | uniq -w 8 |
-z | NUL 分隔行 | sort -z file | uniq -z |
uniq 僅比較相鄰行,因此輸入必須先排序:
# 錯誤:未排序直接 uniq,非相鄰重複行不會被去除
uniq data.txt
# 正確:先排序再去重
sort data.txt | uniq
# 或
sort -u data.txt
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10
# 假設 CSV:id,score,name
sort -t',' -k3,3nr -k1,1 data.csv | sort -t',' -k1,1 --unique
sort -m access.log.1 access.log.2 access.log.3 > access.log.merged
echo -e "1.2.9\n1.2.10\n1.10.1\n2.0.0" | sort -V
# 輸出:1.2.9, 1.2.10, 1.10.1, 2.0.0
sort -f names.txt | uniq -ic
find /var/log -type f -name '*.log' -print0 | sort -z | uniq -z | xargs -0 rm -f
# /etc/passwd 格式:user:x:uid:gid:desc:home:shell
# 按 uid 數值排序,uid 相同按 gid 排序
sort -t':' -k3,3n -k4,4n /etc/passwd
sort -S 50% --parallel=4 -T /tmp/bigsort bigfile.txt(指定記憶體、並行、臨時目錄)。sort -m 合併比全量排序快數量級。export LC_ALL=C 關閉 locale 排序規則,純位元組比較,速度提升 3-10 倍。sort 的 -k/-t/-n/-V 覆蓋 95% 排序需求;uniq 的 -c/-d/-u/-f 覆蓋 95% 去重統計需求。記住「先排序再 uniq」、「善用 LC_ALL=C 加速」,即可在命令列完成企業級文本分析。
USB 隨身碟安裝 Linux 完整教學(以 Ubuntu 為例)
Linux 將 Socket 綁定到指定網路介面 (SO_BINDTODEVICE) 實作
Linux MTD/CFI 閃存驅動架構深度解析:多分區、背靠背與 CFI 探測機制
Linux 緊急救援實戰手冊:救援盤製作、檔案系統修復、檔案找回、函式庫修復、Root 密碼重置、MBR 恢復六大核心場景
校園網互聯網過濾零成本方案:Linux + Squid + SquidGuard 實戰部署
CentOS 部署 Cacti 監控完整實戰:SNMP v3、PHP 時區、防火牆與常見錯誤排解