「ログファイルから出現回数の多いエラーを集計したい」
uniqコマンドは重複行を処理するコマンドですが、「隣接する行しか比較しない」という特性を知らないとハマります。
この記事では、uniqの正しい使い方から、sortとの組み合わせ、ログ集計に使える実践テクニックまで解説します。
・uniq は「隣接する重複行」だけをまとめるコマンド(事前のsortが必須)
・-c で出現回数カウント、-d で重複行のみ、-u で一意の行のみ抽出できる
・sort | uniq -c | sort -rn がログ集計のゴールデンパターン
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
uniqコマンドとは?
uniqは「unique」の略で、連続する重複行を1行にまとめるコマンドです。ここで最も重要なポイントがあります。uniqが比較するのは「隣接する行」だけです。離れた位置にある重複行は検出しません。
そのため、ファイル全体の重複を処理するには、事前にsortで並び替えてからuniqに渡すのが鉄則です。
# これだと離れた位置の重複は消えない uniq data.txt # sortで並び替えてからuniqに渡す(正しい使い方) sort data.txt | uniq
基本的な使い方
1. 重複行を除去する(sort | uniq)
最も基本的な使い方です。sortとパイプで組み合わせます。# 元のファイル cat fruits.txt apple banana apple cherry banana apple # sort | uniqで重複除去 sort fruits.txt | uniq apple banana cherry
2. 重複回数をカウントする(-c)
-c(count)オプションで、各行が何回出現したかを表示します。ログ集計で特に重宝します。sort fruits.txt | uniq -c 3 apple 2 banana 1 cherry
sort fruits.txt | uniq -c | sort -rn 3 apple 2 banana 1 cherry
3. 重複している行だけ表示する(-d)
-d(duplicated)オプションで、2回以上出現する行だけを表示します。sort fruits.txt | uniq -d apple banana
4. 重複していない行だけ表示する(-u)
-u(unique)オプションで、1回しか出現しない行だけを表示します。sort fruits.txt | uniq -u cherry
主要オプション
1. 大文字・小文字を区別しない(-i)
-i(ignore-case)オプションで、大文字と小文字を同一視して比較します。cat mixed.txt Error error ERROR Warning sort mixed.txt | uniq -i Error Warning
2. 先頭のフィールドをスキップする(-f)
-f N(fields)で、先頭からN個のフィールド(スペース/タブ区切り)を無視して比較します。ログのタイムスタンプを無視して比較したい場合に使います。cat log.txt 2026-03-18 disk full 2026-03-19 disk full 2026-03-20 reboot # 先頭1フィールド(日付)をスキップして比較 uniq -f 1 log.txt 2026-03-18 disk full 2026-03-20 reboot
3. 先頭の文字数をスキップする(-s)
-s N(skip-chars)で、先頭からN文字を無視して比較します。# 先頭5文字をスキップして比較 uniq -s 5 data.txt
実務で使えるuniqテクニック
1. アクセスログからIPアドレスの出現回数を集計する
Webサーバーのアクセスログから、どのIPアドレスからのアクセスが多いかを調べるワンライナーです。# Apacheアクセスログ:IPアドレス別アクセス数(上位10件) awk '{print $1}' /var/log/httpd/access_log | sort | uniq -c | sort -rn | head -10 523 192.168.1.100 312 10.0.0.50 198 172.16.0.1
2. エラーログから頻出エラーを見つける
# エラーメッセージの出現回数を集計 grep "error" /var/log/messages | awk '{$1=$2=$3=""; print}' | sort | uniq -c | sort -rn | head -10
3. sort -u との違い
sort -u でも重複除去はできますが、uniqの方が柔軟です。・sort -u:重複除去だけ。カウントや重複抽出はできない
・sort | uniq:-c でカウント、-d で重複抽出、-u でユニーク抽出が可能
単純に重複を消すだけなら sort -u で十分ですが、集計や分析が目的なら sort | uniq を使ってください。
トラブルシュート・エラー対処
「uniqしたのに重複が残る」場合の対処法
uniqで最も多いトラブルです。原因はほぼ確実に「sortしていない」ことです。# NG: sortせずにuniq(離れた重複が残る) cat data.txt | uniq # OK: sortしてからuniq cat data.txt | sort | uniq
# 行末の空白を除去してからuniq sed 's/[[:space:]]*$//' data.txt | sort | uniq
本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| 重複行を除去する | sort ファイル名 | uniq |
| 重複回数をカウントする | sort ファイル名 | uniq -c |
| 出現回数の多い順に並べる | sort ファイル名 | uniq -c | sort -rn |
| 重複している行だけ表示する | sort ファイル名 | uniq -d |
| 重複していない行だけ表示する | sort ファイル名 | uniq -u |
| 大文字小文字を無視して重複除去する | sort ファイル名 | uniq -i |
| 先頭のフィールドを無視して比較する | uniq -f N ファイル名 |
ログ集計やデータ分析を1行で仕上げたい方へ
sort と uniq の組み合わせは、現場の定番ワンライナーです。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:whichコマンドでコマンドの場所を調べる方法|type・whereisとの違いも
- 前のページへ:grepコマンドで文字列を検索する方法|複数ファイルやディレクトリ除外も
- この記事の属するカテゴリ:Linuxコマンド・LinuxコマンドU-Z・テキスト処理コマンドへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます