Linuxコマンド一覧

uniqコマンド|重複した行をまとめて数える

__ __ _ _____
\ \ / /__| |_|_ _|__ _ __ _ __ ___
\ \ /\ / / _ \ '_ \| |/ _ \ '__| '_ ` _ \
\ V V / __/ |_) | | __/ | | | | | |
\_/\_/ \___|_.__/|_|\___|_| |_| |_| |_
 
uniq を試すためのサンドボックスです。実機のファイルには影響しません。
user@webterm:~/project$
 

uniq は隣り合った同じ行を1つにまとめるコマンドです。`sort` と組にする理由、件数を出す `-c`、重複だけを見る `-d` の使い方を、ブラウザ上のターミナルで打ちながら確認できます。

最終更新: 2026-09-06

書式

uniq [オプション] ファイル

隣り合った同じ行を1つにまとめます。

まず打ってみる

同じエラーが続けて出ているログです。

$ cat logs/errors.log
ERROR connection refused
ERROR connection refused
ERROR connection refused
WARN  slow query
ERROR timeout
ERROR timeout

uniq に渡すと、続いている重複が1行にまとまります。

$ uniq logs/errors.log
ERROR connection refused
WARN  slow query
ERROR timeout

何回続いたのかを知りたいときは -c です。

$ uniq -c logs/errors.log
      3 ERROR connection refused
      1 WARN  slow query
      2 ERROR timeout

同じエラーが3回続いた、と読めます。

離れた重複は消えない

ここが uniq のいちばんのつまずきどころです。

$ cat emails.txt
ada@example.com
linus@example.com
ada@example.com
grace@example.com
linus@example.com
ada@example.com
$ uniq emails.txt
ada@example.com
linus@example.com
ada@example.com
grace@example.com
linus@example.com
ada@example.com

1行も減っていません。 同じ行が隣り合っていないからです。 先に sort で並べてから渡します。

$ sort emails.txt | uniq
ada@example.com
grace@example.com
linus@example.com

uniq を使うときは、ほぼ必ず sort とセットになります。

数えて、多い順に並べる

$ sort emails.txt | uniq -c
      3 ada@example.com
      1 grace@example.com
      2 linus@example.com
$ sort emails.txt | uniq -c | sort -nr
      3 ada@example.com
      2 linus@example.com
      1 grace@example.com

この3段(並べる・数える・数で並べ直す)は、ログ調査の定番です。

$ cut -d' ' -f1 logs/access.log | sort | uniq -c | sort -nr
      3 200
      2 404
      1 500

重複だけ・1回だけを見る

-d は2回以上出てきた行だけを出します。

$ sort emails.txt | uniq -d
ada@example.com
linus@example.com

-u は1回しか出てこなかった行だけです。

$ sort emails.txt | uniq -u
grace@example.com

重複の登録を洗い出すなら -d、取りこぼしを探すなら -u が向いています。

実務での使いどころ

uniq は、同じものが何回出たかを知りたいときに打つコマンドです。

場面打ち方
多い順に集計するsort access.log | uniq -c | sort -nr
重複した登録を洗い出すsort emails.txt | uniq -d
1件しかないものを探すsort emails.txt | uniq -u
続いている同じエラーの回数を見るuniq -c errors.log
重複を消すだけsort -u emails.txt

つまずきやすいところ

sort を忘れると何も起きません。 uniq は隣り合った行しか見ません。 「消えない」と感じたら、まず sort を前に付けてください。

消すだけなら sort -u で足ります。

$ sort -u emails.txt
ada@example.com
grace@example.com
linus@example.com

uniq を挟む価値は -c-d にあります。

ディレクトリは渡せません。

$ uniq logs
uniq: logs: Is a directory

ファイルが無いときは、そう言われます。

$ uniq nothing.txt
uniq: nothing.txt: No such file or directory

手を動かして覚える

webterm.appこのサイト

learn.webterm.app別のサイト

>_WEBTERM LEARN

WebTerm Learn|1つのコマンドから、使える状態へ

コマンドは単体で覚えるより、実際の作業の流れの中で使うほうが身につきます。順番に積み上げていくコースがあります。

コースを見る

関連するコマンド

sort / wc / cut / grep

よくある質問

重複しているはずなのに消えません。
uniq は隣り合った行しか見ないからです。離れた場所にある同じ行をまとめたいときは、先に `sort` で並べてから渡してください。
sort -u と何が違いますか?
重複を消すだけなら `sort -u` で足ります。uniq を挟む理由は `-c`(件数)や `-d`(重複だけ)が使えることです。
多い順に並べるにはどうしますか?
`sort | uniq -c | sort -nr` の3段です。並べて、数えて、その数で並べ直します。
-d と -u の違いは何ですか?
`-d` は2回以上出てきた行だけ、`-u` は1回しか出てこなかった行だけを出します。異常を探すときは -d、取りこぼしを探すときは -u が向いています。
件数の数字の幅がそろっているのはなぜですか?
`-c` は右寄せで桁をそろえて出すからです。そのまま `sort -nr` に渡しても正しく並びます。