多くの場合、テキスト ファイルのバージョンを比較すると便利です。システム管理者やソフトウェア開発者にとって、これは特に重要です。たとえば、システム管理者は、システムの問題を診断するために、既存の構成ファイルを以前のバージョンと比較する必要がある場合があります。同様に、プログラマーは、時間の経過とともにプログラムに加えられた変更を頻繁に確認する必要があります。
通信 ユーティリティは、2 つの並べ替えられたファイルの行ごとの比較を表示します。表示される 3 つの列の最初の列には file1 でのみ見つかった行がリストされ、2 番目の列には file2 でのみ検出された行がリストされ、3 番目の列には両方のファイルに共通する行がリストされます。 「comm」コマンドの基本的な構文は次のとおりです。
# comm [options] file1 file2
議論
file1 および file2 引数は、comm が比較するファイルのパス名です。 file1 または file2 の代わりにハイフン (–) を使用すると、comm はそのファイルの代わりに標準入力を読み取ります。
オプション
オプションを組み合わせることができます。オプションがない場合、comm は 3 列の出力を生成します。
オプション | 機能 |
---|---|
-1 | 列 1 を表示しません (file1 のみにある行は表示しません)。 |
-2 | 列 2 を表示しません (file2 のみにある行は表示しません)。 |
-3 | 列 3 を表示しません (両方のファイルにある行を表示しません)。 |
-i | 大文字と小文字を区別しない行の比較 |
– -check-order | すべての入力行がペア可能であっても、入力の順序を確認してください |
– -nocheck-order | 入力の順序を無視 |
– -output-delimiter=STR | 区切り文字「STR」で列を区切ります |
– -help | ヘルプ メニューを表示します |
– -バージョン | コマンドのバージョン情報を表示 |
Linux での「comm」コマンドの使用例
例 1:基本的な使い方
ソートされた 2 つのファイルを比較するための「comm」コマンドの基本的な例を見てみましょう。ファイルは次のとおりです。
# cat file1 aa bb cc dd
# cat file2 cc xx yy zz
comm コマンドは、ファイルを行ごとに比較し、同一の行を出力します。例:
# comm file1 file2 aa bb cc dd xx yy zz
このコマンド出力は 3 つの列に表示されます。列 1 はファイル 1 のみの行 (aa、bb、dd) を示し、列 2 はファイル 2 のみのすべての行 (xx、yy、zz) を示し、列 3 はファイル間の同じ行をすべて示します。 2 つのファイル (cc)。これは diff よりもはるかに詳細な比較であり、1 つまたは 2 つの単純な変更を見つけたり確認したりするだけの場合、出力が膨大になる可能性があります。ただし、どちらのファイルにもあまり詳しくなく、それらを比較したい場合には、非常に便利です。
例 2:カウントの抑制
comm は、-n という形式のオプションをサポートします。ここで、n は 1、2、または 3 のいずれかです。これらのオプションを使用すると、非表示にする列を指定します。たとえば、両方のファイルで共有されている行のみを出力したい場合は、列 1 と 2 の出力を抑制します:
# comm -12 file1 file2 cc
同様に、以下のコマンドを使用して、それぞれ file1 と file2 にのみ存在する行のみを表示できます。
# comm -23 file1 file2 aa bb dd
# comm -13 file1 file2 xx yy zz
例 3:入力の並べ替えチェック
comm コマンドには、並べ替えられた入力をチェックするための 2 つのオプションがあります。
1. –チェックオーダー
2. –nocheck-order
–チェック オーダー オプションは、比較する前に入力が正しくソートされていることを確認します。入力がソートされていない場合、以下に示すようなエラーが発生します:
# comm --check-order file1 file2 aa bb cc dd xx comm: file 2 is not in sorted order
一方、–nocheck-order オプションを使用すると、入力がソートされた形式でない場合でもファイルを比較できます。例:
# cat file1 aa bb cc dd
# cat file2 xx cc yy zz
# comm --nocheck-order file1 file2 aa bb cc dd xx yy zz
例 4:区切られた出力
comm には、ユーザー指定の区切り文字を使用して出力を区切るオプションも用意されています。たとえば、デフォルトの「タブ」区切りの出力の代わりに、「|」などの区切り文字を使用できます。 (パイプ) 以下の例に示すように:
# comm --output-delimiter="|" file1 file2 aa bb ||cc dd |xx |yy |zz
通信速度差
通信 diff に似ています 両方のコマンドが 2 つのファイルを比較するという点で。しかし、comm は uniq のように使用することもできます。 comm は、2 つのソート済みファイル間で重複または一意の行を選択しますが、uniq は、同じソート済みファイル内の重複または一意の行を選択します。