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
Plaintextfile2.txt:
banana
cherry
date
Plaintextこの2つのファイルを比較するために、comm
コマンドを使用します。
comm file1.txt file2.txt
ShellScript実行すると、次のような結果が表示されます。
- 最初の列には
file1.txt
にのみ存在するapple
が表示されます。 - 2番目の列には
file2.txt
にのみ存在するdate
が表示されます。 - 3番目の列には、両方のファイルに共通する
banana
とcherry
が表示されます。
comm
コマンドの主要なオプション
comm
コマンドはさまざまなオプションを提供し、ユーザーが必要に応じて結果をフィルタリングできるようにします。ここでは、最もよく使用されるオプションを紹介します。
-1
オプション: 最初のファイルにのみ存在する項目を非表示にする
このオプションを使用すると、最初のファイルにのみ存在する項目が出力されなくなります。例えば、2つのファイルに共通する項目と、2番目のファイルにのみ存在する項目のみを確認したい場合に便利です。
comm -1 file1.txt file2.txt
ShellScriptこのコマンドを実行すると、次のような結果が表示されます。
-2
オプション: 2番目のファイルにのみ存在する項目を非表示にする
このオプションを使用すると、2番目のファイルにのみ存在する項目が出力されなくなります。最初のファイルにのみ存在する項目と共通する項目を確認したい場合に使用します。
comm -2 file1.txt file2.txt
ShellScriptこのコマンドを実行すると、次のような結果が表示されます。
-3
オプション: 両方のファイルに共通する項目を非表示にする
このオプションを使用すると、両方のファイルに共通する項目が出力されなくなります。2つのファイルの違いのみを確認したい場合に便利です。
comm -3 file1.txt file2.txt
ShellScriptこのコマンドを実行すると、次のような結果が表示されます。
オプションの組み合わせ
前述のオプションは単独で使用することもできますが、組み合わせて使用することもできます。例えば、2つのファイルの共通点のみを確認したい場合、-1
と-2
オプションを一緒に使用できます。
comm -12 file1.txt file2.txt
ShellScriptこのコマンドは次のような結果を出力します。
有用な活用方法
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
コマンドの概念と活用方法を理解し、実際の作業で効果的に活用できることを願っています。