uniq 隣り合った重複行をまとめる
uniq [オプション] [入力 [出力]]試してみる
uniq list.txt隣り合った同じ行を1つにします。離れた apple は残ります。
sort list.txt | uniq先に並べ替えると、離れた重複もまとまります。
sort list.txt | uniq -c各行が何回出たかを先頭に付けます。
sort list.txt | uniq -d重複していた行だけを表示します。
sort list.txt | uniq -u1回しか出ていない行だけを表示します。
cut -d' ' -f1 access.log | sort | uniq -c | sort -nrアクセスログで、IPアドレスごとの回数を多い順に数えます。
主なオプション
-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 などが使える点が違います。