Linuxコマンドcommの使い方と3つのオプション

Linuxコマンドcommは、2つのソートされたファイルを比較し、それぞれの違いと共通点を簡単に確認できる便利なツールです。この記事では、commコマンドの基本的な使い方から、さまざまなオプションの活用方法まで詳しく説明します。Linuxでのファイル比較作業において、commコマンドをどのように効果的に活用できるかを一緒に見ていきましょう。

Linuxコマンドcommとは?

commコマンドは、2つのソートされたファイルを入力として受け取り、各ファイルに固有の項目と共通の項目を出力するLinuxの基本コマンドです。ここで「ソートされたファイル」とは、アルファベット順や数値順などで整列された状態を指します。2つのファイル間の共通点と違いを分析する際に非常に有用です。

なぜソートされたファイルであるべきか?

commコマンドは、2つのファイルの違いを比較する際、各ファイルの内容を1行ずつ順番に対比します。このプロセスでファイルがソートされていないと、正確な比較結果を得ることができません。したがって、commコマンドを使用する前に、ファイルを事前にsortコマンドでソートすることが重要です。ソートされていないファイルでcommコマンドを使用すると、意図しない結果が得られることがあります。

commコマンドの基本的な使い方

commコマンドの基本的な使い方は次のとおりです。

comm [オプション] ファイル1 ファイル2
ShellScript

このコマンドは、デフォルトで2つのファイルを比較し、結果を3つの列に出力します。

  • 最初の列には、最初のファイルにのみ存在する項目が表示されます。
  • 2番目の列には、2番目のファイルにのみ存在する項目が表示されます。
  • 3番目の列には、両方のファイルに共通する項目が表示されます。

次のような2つのファイルがあると仮定します。

file1.txt:

apple
banana
cherry
Plaintext

file2.txt:

banana
cherry
date
Plaintext

この2つのファイルを比較するために、commコマンドを使用します。

comm file1.txt file2.txt
ShellScript

実行すると、次のような結果が表示されます。

図1. Linuxコマンドcomm: ソートされたファイルの比較
図1. Linuxコマンドcomm: ソートされたファイルの比較
  • 最初の列にはfile1.txtにのみ存在するappleが表示されます。
  • 2番目の列にはfile2.txtにのみ存在するdateが表示されます。
  • 3番目の列には、両方のファイルに共通するbananacherryが表示されます。

commコマンドの主要なオプション

commコマンドはさまざまなオプションを提供し、ユーザーが必要に応じて結果をフィルタリングできるようにします。ここでは、最もよく使用されるオプションを紹介します。

-1オプション: 最初のファイルにのみ存在する項目を非表示にする

このオプションを使用すると、最初のファイルにのみ存在する項目が出力されなくなります。例えば、2つのファイルに共通する項目と、2番目のファイルにのみ存在する項目のみを確認したい場合に便利です。

comm -1 file1.txt file2.txt
ShellScript

このコマンドを実行すると、次のような結果が表示されます。

図2. Linuxコマンドcomm: 最初のファイルにのみ存在する項目を非表示にする
図2. Linuxコマンドcomm: 最初のファイルにのみ存在する項目を非表示にする

-2オプション: 2番目のファイルにのみ存在する項目を非表示にする

このオプションを使用すると、2番目のファイルにのみ存在する項目が出力されなくなります。最初のファイルにのみ存在する項目と共通する項目を確認したい場合に使用します。

comm -2 file1.txt file2.txt
ShellScript

このコマンドを実行すると、次のような結果が表示されます。

図3. Linuxコマンドcomm: 2番目のファイルにのみ存在する項目を非表示にする
図3. Linuxコマンドcomm: 2番目のファイルにのみ存在する項目を非表示にする

-3オプション: 両方のファイルに共通する項目を非表示にする

このオプションを使用すると、両方のファイルに共通する項目が出力されなくなります。2つのファイルの違いのみを確認したい場合に便利です。

comm -3 file1.txt file2.txt
ShellScript

このコマンドを実行すると、次のような結果が表示されます。

図4. Linuxコマンドcomm: 共通項目を非表示にする
図4. Linuxコマンドcomm: 共通項目を非表示にする

オプションの組み合わせ

前述のオプションは単独で使用することもできますが、組み合わせて使用することもできます。例えば、2つのファイルの共通点のみを確認したい場合、-1-2オプションを一緒に使用できます。

comm -12 file1.txt file2.txt
ShellScript

このコマンドは次のような結果を出力します。

図5. Linuxコマンドcomm: 共通項目のみを表示する
図5. Linuxコマンドcomm: 共通項目のみを表示する

有用な活用方法

commコマンドは、単に2つのファイルの違いと共通点を見つけるだけでなく、さまざまな活用が可能です。

ファイルソートと一緒に使用する

前述したように、commコマンドはソートされたファイルに対してのみ正しい結果を提供します。もしソートされていないファイルを比較する必要がある場合、sortコマンドと一緒に使用してファイルをソートした後に比較できます。

sort file1.txt -o sorted_file1.txt
sort file2.txt -o sorted_file2.txt
comm sorted_file1.txt sorted_file2.txt
ShellScript

このようにして、ソートされたファイルを比較して正確な結果を得ることができます。

ファイルの違いのみを迅速に見つける

2つのファイル間の違いのみを迅速に見つけたい場合、-3オプションを使用して共通項目を非表示にし、違いのみを確認できます。これは、ファイル同期作業において役立ちます。

スクリプトで活用する

commコマンドは、シェルスクリプトで使用する際に非常に有用です。例えば、2つのリストを比較して、どの項目が追加されたか、どの項目が削除されたかをスクリプトで自動化できます。

new_items=$(comm -13 old_list.txt new_list.txt)
removed_items=$(comm -23 old_list.txt new_list.txt)
ShellScript

上記のコードでは、new_itemsには新しく追加された項目が、removed_itemsには削除された項目が含まれています。

注意事項

commコマンドを使用する際には、必ず両方のファイルがソートされていることを確認してください。ファイルがソートされていない状態でcommを使用すると、意図した結果を得られないことがあります。また、ファイルの形式やエンコーディングが異なる場合、比較結果が異なることがあるので注意が必要です。

まとめ

Linuxコマンドcommは、2つのソートされたファイルを比較し、違いと共通点を簡単に確認できる強力なツールです。さまざまなオプションを活用して、必要に応じた結果をフィルタリングし、ファイル比較作業を効率的に行うことができます。commコマンドを使用する際は、ファイルを事前にソートし、各オプションの用途を理解して、状況に応じて適切に適用することが重要です。この記事を通じて、commコマンドの概念と活用方法を理解し、実際の作業で効果的に活用できることを願っています。

リファレンス

関連ポスト

コメントする