Linux の uniq コマンド:重複フィルタリング

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Linux の uniq コマンドを調べます。これは、テキスト ファイル内の重複行を識別およびフィルタリングするための強力なツールです。電子商取引会社のデータ アナリストとして、顧客の購入データを分析する任務を担っているシナリオを使います。uniq コマンドは、このデータを効率的に処理し、顧客行動に関する貴重な洞察を提供します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/TextProcessingGroup -.-> linux/sort("Text Sorting") linux/TextProcessingGroup -.-> linux/uniq("Duplicate Filtering") subgraph Lab Skills linux/cat -.-> lab-219199{{"Linux の uniq コマンド:重複フィルタリング"}} linux/cd -.-> lab-219199{{"Linux の uniq コマンド:重複フィルタリング"}} linux/sort -.-> lab-219199{{"Linux の uniq コマンド:重複フィルタリング"}} linux/uniq -.-> lab-219199{{"Linux の uniq コマンド:重複フィルタリング"}} end

生の顧客データを調べる

まず、生の顧客の購入データを調べましょう。このデータは、顧客が行った日々の購入を表しています。

まず、プロジェクト ディレクトリに移動する必要があります。Linux では、ディレクトリを変更するには cd コマンドを使用します。チルダ (~) は、ホーム ディレクトリを表すショートカットです。

cd ~/project

このコマンドにより、現在の作業ディレクトリが /home/labex/project に変更されます。正しいディレクトリにいるので、顧客データ ファイルの内容を表示しましょう。「連結 (concatenate)」の略である cat コマンドを使用します。これは一般的にファイルの内容を表示するために使用されます。

cat customer_purchases.txt

以下のような出力が表示されるはずです。

Alice,Electronics
Bob,Books
Charlie,Clothing
Alice,Electronics
David,Home Goods
Bob,Books
Eve,Toys
Charlie,Clothing
Frank,Sports
Alice,Electronics

このファイルには、顧客の名前とその購入内容が含まれており、一部の顧客は複数回購入しています。各行は、顧客の名前の後に購入した商品のカテゴリが続き、コンマで区切られています。

データのソート

uniq コマンドを効果的に使用する前に、データをソートする必要があります。uniq コマンドは隣接する重複行に対して機能するため、ソートすることで重複エントリが隣り合うようになります。

顧客データをアルファベット順にソートするには sort コマンドを使用します。

sort customer_purchases.txt > sorted_purchases.txt

このコマンドを分解してみましょう。

  • sort は、テキストの行をソートするコマンドです。
  • customer_purchases.txt は、ソート対象の入力ファイルです。
  • > はリダイレクト演算子です。左側のコマンドの出力を右側のファイルに書き込みます。
  • sorted_purchases.txt は、ソート済みのデータを保存する新しいファイルです。

では、ソート済みファイルの内容を表示しましょう。

cat sorted_purchases.txt

以下のような出力が表示されるはずです。

Alice,Electronics
Alice,Electronics
Alice,Electronics
Bob,Books
Bob,Books
Charlie,Clothing
Charlie,Clothing
David,Home Goods
Eve,Toys
Frank,Sports

エントリが現在顧客名でアルファベット順にソートされていることに注目してください。このアルファベット順のソートにより、同じ顧客によるすべての購入がまとめられ、次の手順にとって重要です。

uniq を使って重複エントリを削除する

データがソートされたので、uniq コマンドを使って重複エントリを削除できます。これにより、一意の顧客購入のリストが得られます。

次のコマンドを実行します。

uniq sorted_purchases.txt unique_purchases.txt

このコマンドを分解してみましょう。

  • uniq は、ファイル内の繰り返し行をフィルタリングするコマンドです。
  • sorted_purchases.txt は入力ファイル(ソート済みのデータ)です。
  • unique_purchases.txt は結果を保存する出力ファイルです。

uniq コマンドは sorted_purchases.txt からソート済みのデータを読み取り、隣接する重複行を削除し、結果を unique_purchases.txt という新しいファイルに保存します。

では、新しいファイルの内容を表示しましょう。

cat unique_purchases.txt

以下のような出力が表示されるはずです。

Alice,Electronics
Bob,Books
Charlie,Clothing
David,Home Goods
Eve,Toys
Frank,Sports

これで、一意の顧客購入のリストができました。各顧客は 1 回だけ表示されます。これにより、購入の種類を繰り返しなしに明確に把握できます。

uniq -c を使って購入回数をカウントする

uniq コマンドをオプションを使うとさらに強力になります。各顧客が何回購入したかをカウントするには -c オプションを使いましょう。

次のコマンドを実行します。

uniq -c sorted_purchases.txt purchase_counts.txt

このコマンドを分解してみましょう。

  • uniq は繰り返し行をフィルタリングするコマンドです。
  • -c は、出現回数を行頭に付けるように uniq に指示するオプションです。
  • sorted_purchases.txt は入力ファイルです。
  • purchase_counts.txt は結果を保存する出力ファイルです。

このコマンドは、各一意の行の出現回数をカウントし、結果を purchase_counts.txt に保存します。

では、この新しいファイルの内容を表示しましょう。

cat purchase_counts.txt

以下のような出力が表示されるはずです。

   3 Alice,Electronics
   2 Bob,Books
   2 Charlie,Clothing
   1 David,Home Goods
   1 Eve,Toys
   1 Frank,Sports

各行の先頭の数字は、その顧客が購入した回数を示しています。たとえば、Alice は 3 回電子機器を購入し、Frank は 1 回スポーツ用品を購入しました。

uniq -d を使って再購入顧客を特定する

データ アナリストとして、再購入顧客を特定することに興味があるかもしれません。uniq コマンドの -d オプションを使って、複数回購入した顧客を表す重複行のみを表示することができます。

次のコマンドを実行します。

uniq -d sorted_purchases.txt repeat_customers.txt

このコマンドを分解してみましょう。

  • uniq は繰り返し行をフィルタリングするコマンドです。
  • -d は、uniq に重複行のみを表示するように指示するオプションです。
  • sorted_purchases.txt は入力ファイルです。
  • repeat_customers.txt は結果を保存する出力ファイルです。

このコマンドは sorted_purchases.txt の重複行を特定し、それらを repeat_customers.txt に保存します。

この新しいファイルの内容を表示しましょう。

cat repeat_customers.txt

以下のような出力が表示されるはずです。

Alice,Electronics
Bob,Books
Charlie,Clothing

これらは複数回購入した顧客です。この情報は、顧客忠誠度プログラムやターゲット マーケティング キャンペーンにとって価値があるかもしれません。

まとめ

この実験では、Linux の uniq コマンドとその顧客購入データの分析への応用について学びました。以下のことができるようになりました。

  1. uniq で使用するデータをまずソートして準備する。
  2. ソート済みファイルから重複エントリを削除するために uniq を使用する。
  3. 各一意の行の出現回数をカウントするために uniq -c を使用する。
  4. 重複行を特定するために uniq -d を使用する。

これらのスキルはデータ分析タスクにとって価値があり、大規模なデータセットから効率的に情報を処理して抽出するのに役立ちます。

この実験では扱わなかった追加の uniq コマンド オプションには、以下があります。

  • -u: 一意の行のみを表示する(ちょうど 1 回だけ出現する行)
  • -i: 行を比較する際に大文字小文字を無視する
  • -f N: 行を比較する際に最初の N フィールドをスキップする
  • -s N: 行を比較する際に最初の N 文字をスキップする

参考資料