comm - ソート済みファイルの行を比較する

comm

commコマンドは2つのソート済みファイルの行を比較することができます。
commコマンドをオプションなしで使用すると3つの列が現れ、1つ目のファイルのみに存在する行、2つ目のファイルのみに存在する行、両方のファイルに存在する行と比較することができます。

commコマンドとは

commコマンドとは、2つのソート済みファイルを比較するコマンドです。
ソート済みファイルはsortコマンドをオプションなしで使用することで作成することができます。

列は左から順に
1.1つ目の引数のファイルにのみ存在する行
2.2つ目の引数のファイルにのみ存在する行
3.両方の引数のファイルに存在する行
というように表示される。

-1オプション、-2オプション,-3オプションは、それぞれの対応する列の表示をしないオプションになります。

commコマンドの利用例

ファイルの比較
(オプションなし)

commコマンドは、2つのソート済みファイルを引数に取ります。出力結果は3つの列がTAB区切りで表示され、左から順に、1つ目の引数のファイルにのみ存在する行、2つ目の引数のファイルにのみ存在する行、両方の引数のファイルに存在する行が表示されます。

コマンド例

file1.txt

file2.txt

実行結果

1つ目の引数のファイルのみにある行を表示
(-23オプション)

-1オプションと-2オプションと-3オプションは、それぞれの対応する列を表示しないようにします。
つまり、-23オプションで1列目の1つ目の引数のファイルのみにある行を表示します。

コマンド例

file1.txt

file2.txt

実行結果

2つ目の引数のファイルのみにある行を表示
(-13オプション)

-1オプションと-2オプションと-3オプションは、それぞれの対応する列を表示しないようにします。
つまり、-13オプションで2列目の2つ目の引数のファイルのみにある行を表示します。

コマンド例

file1.txt

file2.txt

実行結果

両方の引数のファイルのみにある行を表示
(-12オプション)

-1オプションと-2オプションと-3オプションは、それぞれの対応する列を表示しないようにします。
つまり、-12オプションで3列目の両方の引数のファイルに存在する行を表示します。

コマンド例

file1.txt

file2.txt

実行結果

それぞれの列の行数の表示
(--totalオプション)

--totalオプションは、それぞれの列の行数を最後の行に表示します。

コマンド例

file1.txt

file2.txt

実行結果

--totalオプションはGNU拡張機能です。GNU拡張機能を使わずに行数を表示するにはそれぞれの列に対して、wcコマンドを使います。
例えば、1列目に対して行数を知りたい場合は以下のようにします。
コマンド例

実行結果

区切り文字の変更
(--output-delimiterオプション)

--output-delimiterオプションは区切り文字を変更することができます。
また、デフォルトの区切り文字はTABになります。

コマンド例

file1.txt

file2.txt

実行結果

順番をチェック
(--check-orderオプション)

--order-checkオプションは、引数のファイルがソートされていない行が現れた時点で致命的なエラーとしてcommコマンドを停止させます。

コマンド例

nonsortedfile1.txt

file2.txt

実行結果

--check-orderオプションがない場合は停止せずにエラーメッセージが表示します。
コマンド例

実行結果

順番をチェックしない
(--nocheck-orderオプション)

--nocheck-orderオプションは、引数のファイルがソートされていない場合でもエラーメッセージを表示しません。

コマンド例

nonsortedfile1.txt

file2.txt

実行結果

参考

外部リンクGnu Coreutils

外部リンクGnu Coreutils日本語版