核心限制:只能處理相鄰的重複行。非連續重複需先 sort 再 uniq (即經典 sort | uniq 模式)。
$ cat test
boy took bat home
boy took bat home
girl took bat home
dog brought hat home
dog brought hat home
dog brought hat home
| 命令 | 參數含義 | 輸出 | 說明 |
|---|---|---|---|
uniq test | 無參數:顯示去重後行 (連續重複只保留第一行) | boy took bat home girl took bat home dog brought hat home | 基礎去重 |
uniq -c test | -c (count):行首顯示連續出現次數 | 2 boy took bat home 1 girl took bat home 3 dog brought hat home | 統計頻次,配合 sort -nr 找高頻行 |
uniq -d test | -d (duplicate):僅顯示有連續重複的行 (每組一行) | boy took bat home dog brought hat home | 找重複行,不顯示計數 |
uniq -u test | -u (unique):僅顯示無連續重複的行 (唯一行) | girl took bat home | 找獨特行 |
uniq -f 2 -s 2 test | -f N:忽略前 N 個字段 (空白分隔) -s N:忽略第 N+1 字段的前 N 個字符 | boy took bat home | 精準控制比較範圍 |
uniq -f 1 test | 忽略第 1 字段 (boy/girl/dog) | boy took bat home dog brought hat home | 視「took bat home」為連續重複 |
uniq -f 1 比較時跳過第一個單詞,上例中 boy took bat home 和 girl took bat home 視為相同 (均為 took bat home)。-f 2 -s 2:忽略前 2 字段 (boy took/girl took/dog brought),再忽略第 3 字段 (bat/bat/hat) 前 2 字符 → 比較內容為 t home/t home/t home (全部相同) → 僅輸出第一行。uniq -w 6 僅比較前 6 字符。sort | uniq -c | sort -nr)awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -20
grep -v '^#' nginx.conf | grep -v '^$' | sort | uniq -d
# 找出非註釋非空行的重複配置項
strace -c -p 2>&1 | tail -20 | uniq -c
# 統計系統調用分布 (需配合其他工具)
cut/awk 提取字段去重# 只比較第 2、3 字段
awk '{print $2, $3}' data.txt | sort | uniq -c
sort 先**。sort 需載入內存,超大文件用 sort -T /tmp --buffer-size=1G 或分片處理。sort -f / uniq -i 忽略大小寫。sort -u 區別:sort -u = sort | uniq (全局去重);uniq 僅連續去重 — **語義不同,不可混用**。uniq 是「連續去重」專家,sort 是「全局排序」基石。組合 sort | uniq -c | sort -nr 是文本頻率分析的黃金管道。掌握 -f/-s/-w 字段/字符級控制,能處理結構化日誌、配置審計等進階場景。下次面對幾百 MB 日誌找高頻異常,這條管道是你的核心武器。