テキスト処理
uniq
隣接する重複行を除去またはカウントする。sort と組み合わせて使うのが基本
SYNTAX
uniq [options] [input [output]] 主なオプション
| オプション | 説明 |
|---|---|
-c | 重複回数を行頭に表示 |
-d | 重複している行のみ表示 |
-u | 重複していない行(1回だけ現れる行)のみ表示 |
-i | 大文字小文字を区別しない |
重要な前提
uniq は 隣接する行 しか比較しない。そのため、離れた場所にある重複を除去するには必ず先に sort する。
# NG: ソートせずに uniq → 離れた重複は除去されない
uniq file.txt
# OK: sort してから uniq
sort file.txt | uniq
使用例
# 重複行を除去
sort words.txt | uniq
# 各行の出現回数を表示
sort words.txt | uniq -c
# 出現回数の多い順に並べる(頻出ワードランキング)
sort words.txt | uniq -c | sort -rn
# 2回以上現れた行のみ表示
sort file.txt | uniq -d
# 1回しか現れない行のみ表示
sort file.txt | uniq -u
実践的なパターン
# アクセスログからユニークIPアドレスの数を集計
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10
# ログファイルからエラー種別の出現回数を集計
grep "ERROR" app.log | awk '{print $5}' | sort | uniq -c | sort -rn
# 重複するメールアドレスを検出
sort emails.txt | uniq -d