テキスト処理

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