utte

uniq 隣り合った重複行をまとめる

uniq [オプション] [入力 [出力]]

試してみる

主なオプション

-c各行の前に出現回数を付ける
-d重複している行だけ表示する
-u重複していない行だけ表示する
-i大文字と小文字を区別しない
-f 数先頭の指定した数の項目を無視して比べる
-s 数先頭の指定した文字数を無視して比べる

解説

隣り合った行だけ

uniq が1つにまとめるのは、隣り合った同じ行だけです。離れた位置にある同じ行は、重複とみなされません。そのため、ほとんどの場合は sort | uniq の形で使います。

数える

sort | uniq -c | sort -nr は、頻出するものを数えて多い順に並べる定番の形です。ログからIPアドレスやステータスコードの集計をするときによく使います。最後の sort -nr は、回数を数値として大きい順に並べます。

重複だけ、単独だけ

-d は2回以上出た行を1回ずつ、-u は1回しか出なかった行を表示します。

比較の範囲

-f で先頭の項目、-s で先頭の文字数を飛ばして比べられます。たとえば行頭にタイムスタンプが付いたログで、それ以降の文だけで重複を見たいときに使えます。

sort -u との違い

重複を除くだけなら sort -u でも同じです。uniq は、回数を数える -c などが使える点が違います。

このコマンドを使う問題

  1. cut と sort でCSVの列から重複のない一覧を作る
  2. アクセスログから最も多いIPアドレスを調べる

関連するコマンド

LinuC 101の出題範囲