Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 文本處理利器:sort 與 uniq 完整參數與實戰範例

編輯:Linux 教學

前言

sort 與 uniq 是 Shell 管線中處理結構化文本的黃金搭檔:sort 負責多鍵值、多規則排序,uniq 負責去重與計數。掌握兩者參數組合,能以一行指令完成資料清洗、日誌統計、CSV 分析等任務。本文系統整理參數、排序邏輯、實戰管線範例。

一、sort 核心參數速查

參數功能範例
-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

二、uniq 核心參數速查

參數功能範例
-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
-zNUL 分隔行sort -z file | uniq -z

三、關鍵原則:uniq 必須配合 sort

uniq 僅比較相鄰行,因此輸入必須先排序:


# 錯誤:未排序直接 uniq,非相鄰重複行不會被去除
uniq data.txt

# 正確:先排序再去重
sort data.txt | uniq
# 或
sort -u data.txt

四、實戰管線範例

1. 統計日誌中 IP 存取次數 Top 10


awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10

2. CSV 第 3 欄數值排序,第 1 欄去重保留最大值


# 假設 CSV:id,score,name
sort -t',' -k3,3nr -k1,1 data.csv | sort -t',' -k1,1 --unique

3. 合併多個已排序日誌檔(不重新排序)


sort -m access.log.1 access.log.2 access.log.3 > access.log.merged

4. 版本號自然排序


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

5. 忽略大小寫去重並計數


sort -f names.txt | uniq -ic

6. 處理 NUL 結尾檔名(安全處理含空白/換行檔名)


find /var/log -type f -name '*.log' -print0 | sort -z | uniq -z | xargs -0 rm -f

7. 自定義欄位分隔符的多鍵排序


# /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 合併比全量排序快數量級。
  • LC_ALL=C:export LC_ALL=C 關閉 locale 排序規則,純位元組比較,速度提升 3-10 倍。

六、總結

sort 的 -k/-t/-n/-V 覆蓋 95% 排序需求;uniq 的 -c/-d/-u/-f 覆蓋 95% 去重統計需求。記住「先排序再 uniq」、「善用 LC_ALL=C 加速」,即可在命令列完成企業級文本分析。

Copyright © Windows教程網 All Rights Reserved