uniqコマンド
- 重複している行を削除する
- 大文字/小文字を区別しないで重複行を削除する
- 重複している行をカウントする
uniqコマンド概要
uniq
コマンドは、ファイル内の重複している行を扱うコマンドです。具体的には重複している行を除去して表示したり、重複回数を表示したりできます。
- ヒント
uniq
コマンドを実行する前にsort
コマンドで並べ替えておく必要があります。
uniqコマンドの書式
uniq [オプション] 入力ファイル [出力ファイル]
uniqコマンドの主なオプション
オプション | 意味 |
---|---|
-i | 比較時に大文字と小文字の違いを無視する |
-c | 各行の前に出現回数を出力する |
uniqコマンド詳細説明
重複している行を削除する
$ uniq
ファイル名 で、ファイル内の重複行を取り除くことができます。注意点はあらかじめsort
コマンドで並べ替えておく必要があります。
- ヒント
- 実は
sort -u
というコマンドは、並べ替えつつuniqも実行するという便利なsort
コマンドのオプションもあります。一般的にはsort -u
を使うことが多いのですが、明示的にuniqコマンドを使うこともあります。
以下のコマンドの出力は同じです。
$ cat fileName.txt | sort | uniq
$ cat fileName.txt | sort -u
大文字/小文字を区別しないで重複行を削除する
「-i」(–ignore-case)オプションを使うと、大文字/小文字を区別しないで重複する行を削除することができます。
- ヒント
uniq
コマンドのignore-caseは-iです。同時に予め実行しておくsortコマンドもignore-caseも行う必要がありますが、こちらのオプションは -f です。紛らわしいですね。
- ヒント
- 各コマンドのignore-case(大文字小文字を区別しない)は、以下のとおりです。
- sort -f
- uniq -i
- grep -i
実行結果は以下のとおりです。
$ cat fileName.txt | sort -f | uniq -i
重複している行をカウントする
sort
とuniq
コマンドの組み合わせで、最も使われるオプションは-cでしょう。「-c」オプションは、重複している行をカウントします。
アクセスログを並べ替えて表示
cat /var/log/httpd/access.log | sort | uniq -c | sort -n | head -n15
最初のcat
でApacheのaccess.logを出力します。
次のsort
で出力を並べ替えます。
そしてuniq -c
で、重複行の数をカウントし、行頭に頻度数を付与します。
さらに、行頭の頻度数を数値として扱いsort -n
で並べ替えます。
最後のhead -n15
コマンドで、頻度の高いアクセスを出力します。
- ヒント
- CSSなどのファイルを除外する場合は以下のコマンドを使うと良いでしょう。
cat /var/log/httpd/access.log | grep -ive "GET /.*\.\(css\|js\|jpg\|gif\|png\|swf\|ico\)\ HTTP" | sort | uniq -c | sort -n | head -n15