uniqコマンドとは?初心者でもわかるLinuxで重複行を処理する基本
生徒
「Linuxで同じ行が何回も出てくるデータを、きれいに整理したいんですが、どうすればいいですか?」
先生
「そういうときは uniq コマンドを使うと、重複した行をまとめたり削除したりできますよ。」
生徒
「難しそうです…。パソコン初心者でも使えますか?」
先生
「大丈夫です。メモ帳の文章を整理する感覚で使えるので、順番に説明しますね。」
1. uniqコマンドとは?
uniqコマンドは、Linuxで連続して重複している行を処理するための基本コマンドです。ログファイルや一覧データなどで、同じ内容の行が何度も並んでいる場合に、それを一つにまとめたり、重複だけを取り出したりできます。
イメージとしては、ノートに同じ言葉を何度も書いてしまったときに、同じ行を一つにまとめて読みやすくする作業に近いです。Windowsの表計算ソフトで「重複の削除」をする感覚だと考えるとわかりやすいでしょう。
2. uniqを使う前に知っておきたい重要なポイント
uniqコマンドには、とても大切な前提条件があります。それは、同じ行が連続して並んでいないと重複として判断されないという点です。
そのため、一般的には sort コマンドと組み合わせて使います。sortは行を並び替えるコマンドで、同じ行をまとめてくれます。この二つをセットで覚えると、テキスト処理が一気に楽になります。
3. 基本的な使い方:重複行をまとめる
まずは、もっとも基本的な使い方を見てみましょう。次のようなテキストファイルがあるとします。
cat fruits.txt
apple
apple
banana
banana
banana
orange
このファイルに対して uniq を使うと、連続した重複行が一つにまとめられます。
uniq fruits.txt
apple
banana
orange
同じ単語が何回出てきても、連続していれば一行に整理されるのが特徴です。
4. sortとuniqを組み合わせて使う方法
もし同じ行がバラバラの場所に書かれている場合、そのままでは uniq は正しく動きません。そこで sort と組み合わせます。
sort fruits.txt | uniq
apple
banana
orange
このようにパイプ(|)を使うことで、「並び替えた結果をそのまま uniq に渡す」という流れを作れます。パイプは「次の作業に渡すホース」のようなものだと考えると理解しやすいです。
5. 重複回数を数える:-cオプション
-cオプションを使うと、各行が何回出てきたのかを数えて表示できます。ログ解析などで非常によく使われます。
sort fruits.txt | uniq -c
2 apple
3 banana
1 orange
左側の数字が出現回数です。「どのデータが多いのか」を確認したいときに便利です。
6. 重複行だけ・重複していない行だけを表示する
uniqには、条件に応じて行を選び出す機能もあります。
重複している行だけを表示したい場合は -d を使います。
sort fruits.txt | uniq -d
apple
banana
逆に、一度しか出てこない行だけを表示したい場合は -u を使います。
sort fruits.txt | uniq -u
orange
データの中から「例外」を見つけたいときに役立ちます。
7. uniqと似たコマンドとの違い
uniqは重複行の処理に特化したコマンドですが、似た目的で使われるものに sort や grep があります。
sortは並び替えが目的で、grepは特定の文字を含む行を探すコマンドです。uniqは「同じ行かどうか」を基準に処理する点が大きな違いです。
それぞれ役割が違うため、組み合わせて使うことでLinuxのテキスト処理はとても強力になります。
8. 初心者がつまずきやすい注意点
初心者がよく混乱するのが、「uniqを使ったのに重複が消えない」というケースです。その原因の多くは、行が連続していないことにあります。
また、見た目が同じでも、空白やタブが違うと別の行として扱われます。データ処理では「見えない違い」が結果に影響することを覚えておくと安心です。