Linuxでテキストファイルやログファイルを扱う際、同じ行が繰り返される「重複行」に出会うことはよくあります。こうした重複行を簡単に取り除くために便利なのが、uniq
コマンドです。シンプルながら非常に強力なこのコマンドは、ソートされたデータの中から重複を除去し、スッキリとした出力を実現してくれます。本記事では、uniq
コマンドの基本的な使い方から、オプションを活用した応用方法、実践的な使用例までをわかりやすく解説していきます。初心者の方にも安心して使いこなしていただけるよう、具体的なコマンド例を交えて紹介していきますので、ぜひ参考にしてください。
uniqコマンドとは?
uniq
コマンドは、標準入力またはファイルから読み込んだテキストの中から、連続して重複する行を削除して出力するコマンドです。よく「重複行を削除するコマンド」として知られていますが、実は連続する重複にしか対応していないという点が重要です。
基本構文
bashコピーする編集するuniq [オプション] [入力ファイル] [出力ファイル]
例えば、次のようなファイルがあったとします。
apple
apple
banana
banana
banana
cherry
apple
このファイルにuniq
を適用すると、次のような出力になります。
uniq fruits.txt
結果:
apple
banana
cherry
apple
最後のapple
が残っているのは、連続していないためです。uniq
は隣接した行しか判定しないため、このような出力になります。
sortコマンドとの組み合わせ
先ほどのように、重複行が連続していない場合、uniq
だけではすべての重複を取り除くことができません。その場合は、まずsort
コマンドを使って行を並べ替え、重複行を隣接させてからuniq
を使うのが基本です。
sort fruits.txt | uniq
このようにパイプでつなぐと、すべての重複行が連続して並ぶため、uniq
で完全に除去することができます。
出力結果:
apple
banana
cherry
よく使うuniqのオプション一覧
uniq
にはいくつか便利なオプションがあります。それぞれを活用することで、さらに柔軟な処理が可能になります。
-c:重複の回数を表示
各行が何回出現したかを表示します。ソートされたデータと組み合わせて使うと有効です。
sort fruits.txt | uniq -c
出力例:
3 apple
3 banana
1 cherry
-d:重複している行だけを表示
2回以上出現している行だけを抽出します。
sort fruits.txt | uniq -d
出力例:
apple
banana
-u:一度だけ現れる行を表示
一度しか出現しない行(ユニークな行)だけを表示します。
sort fruits.txt | uniq -u
出力例:
cherry
実践例:ログファイルの重複行除去
Linuxのログファイルでは、特定のメッセージが繰り返し出力されることがあります。たとえば、あるエラー行が何度も出ている場合、一覧を見やすくするために重複行を削除したいときにuniq
が活躍します。
cat /var/log/syslog | sort | uniq
または、重複行の回数を確認するには:
cat /var/log/syslog | sort | uniq -c | sort -nr | head
これは、重複数の多いメッセージを上位から表示するコマンドです。トラブルシューティングの際に非常に役立ちます。
ファイルの書き換えと出力先指定
uniq
コマンドは、結果を別ファイルに出力することもできます。
sort input.txt | uniq > output.txt
このようにすることで、元のファイルはそのままに、重複を取り除いたデータを新しいファイルとして保存できます。
パイプと組み合わせた活用例
Linuxの哲学「小さな部品をつなげて使う」を体現するのが、uniq
と他コマンドの組み合わせです。例えば、ファイルの中のユニークな行をカウントして表示するには:
sort file.txt | uniq -c | sort -nr
また、ユニークなメールアドレスの一覧を取得するなど、テキスト処理の一部として頻繁に使われます。
uniqで注意すべきポイント
重複行を削除できない場合の原因
- 連続していない重複には効果がない
- 空白やタブが異なる場合、別の行とみなされる
- 大文字と小文字の違いも区別される(case sensitive)
このような場合には、sort
やtr
、sed
などと併用して整形処理を加える必要があります。
例:大文字・小文字を無視した重複削除(すべて小文字に変換)
cat file.txt | tr '[:upper:]' '[:lower:]' | sort | uniq
まとめ
uniq
コマンドは、テキスト処理において「重複行の削除」という非常に重要な役割を果たします。ただし、重複行が連続していないと削除できないという仕様があるため、sort
とセットで使うのが基本です。
さらに、オプション(-c
, -d
, -u
など)を活用することで、単なる削除だけでなく、重複の数を把握したり、特定の行だけを抽出したりと、より実践的な使い方が可能になります。
ログ解析、CSV処理、データ整形など、幅広い場面で活用できるので、ぜひ一度ターミナルで試してみてください。uniq
を使いこなせば、Linuxのテキスト処理がさらに効率よく、快適になります。