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つ目の引数のファイルにのみ存在する行、両方の引数のファイルに存在する行が表示されます。
コマンド例
1 |
comm file1.txt file2.txt |
file1.txt
1 2 3 4 5 6 |
aaa aaa bbb bbb ccc ddd |
file2.txt
1 2 3 |
aaa bbbbb ccc |
実行結果
1 2 3 4 5 6 7 |
aaa aaa bbb bbb bbbbb ccc ddd |
1つ目の引数のファイルのみにある行を表示
(-23オプション)
-1オプションと-2オプションと-3オプションは、それぞれの対応する列を表示しないようにします。
つまり、-23オプションで1列目の1つ目の引数のファイルのみにある行を表示します。
コマンド例
1 |
comm -23 file1.txt file2.txt |
file1.txt
1 2 3 4 5 6 |
aaa aaa bbb bbb ccc ddd |
file2.txt
1 2 3 |
aaa bbbbb ccc |
実行結果
1 2 3 4 |
aaa bbb bbb ddd |
2つ目の引数のファイルのみにある行を表示
(-13オプション)
-1オプションと-2オプションと-3オプションは、それぞれの対応する列を表示しないようにします。
つまり、-13オプションで2列目の2つ目の引数のファイルのみにある行を表示します。
コマンド例
1 |
comm -13 file1.txt file2.txt |
file1.txt
1 2 3 4 5 6 |
aaa aaa bbb bbb ccc ddd |
file2.txt
1 2 3 |
aaa bbbbb ccc |
実行結果
1 |
bbbbb |
両方の引数のファイルのみにある行を表示
(-12オプション)
-1オプションと-2オプションと-3オプションは、それぞれの対応する列を表示しないようにします。
つまり、-12オプションで3列目の両方の引数のファイルに存在する行を表示します。
コマンド例
1 |
comm -12 file1.txt file2.txt |
file1.txt
1 2 3 4 5 6 |
aaa aaa bbb bbb ccc ddd |
file2.txt
1 2 3 |
aaa bbbbb ccc |
実行結果
1 2 |
aaa ccc |
それぞれの列の行数の表示
(--totalオプション)
--totalオプションは、それぞれの列の行数を最後の行に表示します。
コマンド例
1 |
comm --total file1.txt file2.txt |
file1.txt
1 2 3 4 5 6 |
aaa aaa bbb bbb ccc ddd |
file2.txt
1 2 3 |
aaa bbbbb ccc |
実行結果
1 2 3 4 5 6 7 8 |
aaa aaa bbb bbb bbbbb ccc ddd 4 1 2 合計 |
例えば、1列目に対して行数を知りたい場合は以下のようにします。
コマンド例
1 |
comm -23 file1.txt file2.txt | wc -l |
実行結果
1 |
4 |
区切り文字の変更
(--output-delimiterオプション)
--output-delimiterオプションは区切り文字を変更することができます。
また、デフォルトの区切り文字はTABになります。
コマンド例
1 |
comm --output-delimiter='##' file1.txt file2.txt |
file1.txt
1 2 3 4 5 6 |
aaa aaa bbb bbb ccc ddd |
file2.txt
1 2 3 |
aaa bbbbb ccc |
実行結果
1 2 3 4 5 6 7 |
####aaa aaa bbb bbb ##bbbbb ####ccc ddd |
順番をチェック
(--check-orderオプション)
--order-checkオプションは、引数のファイルがソートされていない行が現れた時点で致命的なエラーとしてcommコマンドを停止させます。
コマンド例
1 |
comm --check-order nonsortedfile1.txt file2.txt |
nonsortedfile1.txt
1 2 3 4 5 6 |
bbb aaa aaa ccc ddd bbb |
file2.txt
1 2 3 |
aaa bbbbb ccc |
実行結果
1 2 3 |
aaa bbb comm: ファイル 1 がソートされていません |
コマンド例
1 |
comm nonsortedfile1.txt file2.txt |
実行結果
1 2 3 4 5 6 7 8 9 |
aaa bbb comm: ファイル 1 がソートされていません aaa aaa bbbbb ccc ddd bbb |
順番をチェックしない
(--nocheck-orderオプション)
--nocheck-orderオプションは、引数のファイルがソートされていない場合でもエラーメッセージを表示しません。
コマンド例
1 |
comm --nocheck-order nonsortedfile1.txt file2.txt |
nonsortedfile1.txt
1 2 3 4 5 6 |
bbb aaa aaa ccc ddd bbb |
file2.txt
1 2 3 |
aaa bbbbb ccc |
実行結果
1 2 3 4 5 6 7 8 |
aaa bbb aaa aaa bbbbb ccc ddd bbb |
参考
外部リンクGnu Coreutils
外部リンクGnu Coreutils日本語版