uniqコマンドで特定の重複だけを抽出する方法!初心者でもわかるLinuxの重複データ処理
生徒
「同じ行が何回も出てくるデータがあるんですが、重複しているものだけ取り出すことはできますか?」
先生
「できますよ。Linuxではuniqコマンドを使うことで、重複した行だけを抽出できます。」
生徒
「重複しているものだけって、どういう意味ですか?」
先生
「同じ内容が連続している行のうち、重複している部分だけを取り出すという意味です。具体的な例で説明しますね。」
1. uniqコマンドとは
uniqコマンドは、Linuxで重複した行を整理するための基本的なコマンドです。
たとえば、同じ名前や同じデータが何度も並んでいるときに、重複を削除したり、重複しているものだけを取り出したりできます。
イメージとしては、「同じものが続いている部分を見つけて整理する道具」です。
ただし重要なポイントとして、連続している重複しか判定できないという特徴があります。
2. 重複だけを抽出する基本オプション
重複している行だけを表示したい場合は、-dオプションを使います。
-dは「duplicate」の略で、「重複しているものだけ」という意味です。
uniq -d sample.txt
apple
banana
この結果は、「複数回出てきたデータだけ」を表示しています。
つまり、一回しか出てこない行は表示されません。
3. サンプルで理解する重複抽出
次のようなテキストファイルを用意します。
cat sample.txt
apple
apple
banana
banana
orange
この状態でuniq -dを実行すると、重複している「apple」と「banana」だけが表示されます。
uniq -d sample.txt
apple
banana
ここで「orange」は一回しか出てこないため、表示されません。
4. sortコマンドと組み合わせる理由
uniqコマンドは「連続している行」しか重複と判断できません。
そのため、順番がバラバラだと正しく動作しません。
cat sample.txt
apple
banana
apple
banana
この状態でuniq -dを使っても、重複として認識されません。
そこで使うのがsortコマンドです。
sortは、データを並び替えるコマンドで、同じ行をまとめてくれます。
sort sample.txt | uniq -d
apple
banana
これで、正しく重複だけを抽出できます。
5. 出現回数と一緒に確認する方法
重複しているだけでなく、「何回出てきたか」も知りたい場合は、-cオプションを使います。
sort sample.txt | uniq -c
2 apple
2 banana
1 orange
このように、左側に回数が表示されます。
数字が大きいほど、たくさん重複していることがわかります。
6. 重複していない行を抽出する方法
逆に、「重複していない行だけ」を取り出したい場合は、-uオプションを使います。
sort sample.txt | uniq -u
orange
-uは「unique」の意味で、「一度しか出てこない行」を表示します。
データの中で、珍しい値や一度だけ出現するものを探すときに便利です。
7. よくある使い方のパターン
実際の作業では、以下のような組み合わせがよく使われます。
重複だけを抽出
sort data.txt | uniq -d
apple
banana
重複回数を確認
sort data.txt | uniq -c
2 apple
3 banana
重複していないものだけ抽出
sort data.txt | uniq -u
orange
このように、sortとuniqをセットで覚えると、データ整理がとても楽になります。
8. 初心者がつまずきやすいポイント
初心者がよく間違えるポイントは次の2つです。
- sortを使わずにuniqを実行してしまう
- 連続していない重複が検出されない理由がわからない
uniqは「隣り合っている行」しか比較しません。
そのため、必ずsortで並び替えることが大切です。
これは「同じものを並べてから数える」というイメージで覚えると理解しやすいです。