かべぎわブログ

技術的なことについてかけたらいいな…

commコマンドで2つのテキストファイルの比較結果を出力する

あんまり知られてないような気がするけれど結構便利なcommコマンドについてまとめてみます。

commコマンドとは?

commコマンドとは、2つのソートされたテキストファイルを比較できるコマンドです。 ファイルを比較して、片方のファイルにしか存在しない行や、両方のファイルに共通して存在する行などを出力することができます。

ためしにうごかしてみる

たとえば以下のようなテキストファイルが存在するとします。

$ cat wawawa.txt 
AAA
BBB
CCC
DDD
EEE
$ cat sasasa.txt 
BBB
CCC
FFF

これをcomm コマンドで比較してみると以下のような出力になります。

$ comm wawawa.txt sasasa.txt 
AAA
        BBB
        CCC
DDD
EEE
    FFF

1カラム目(左)がwawawa.txtにのみ存在する行
2カラム目(真ん中)がsasasa.txtにのみ存在する行
3カラム目(右)がwawawa.txtとsasasa.txtに存在する行が出力されています。

オプションは以下のような物があります。

オプション 説明
-1 1カラム目を出力しない
-2 2カラム目を出力しない
-3 3カラム目を出力しない
--check-order ソートされているかどうかを確認する
--nocheck-order ソートされているかどうか確認しない
--output-delimiter=でりみた カラムを区切る文字列を指定

実用的な使い方

おもいついた使い方を書いていきます。

wawawa.txtにしか存在しない行を出力

$ comm -23 wawawa.txt sasasa.txt
AAA
DDD
EEE

sasasa.txtにしか存在しない行を出力

$ comm -13 wawawa.txt sasasa.txt
FFF

両方のファイルに存在する行を出力

$ comm -12 wawawa.txt sasasa.txt
BBB
CCC

おわりに

commコマンドを利用することでかんたんに2つのファイルの比較をすることができました。
diffでこねこねしなくてもいいのでかんたんですね!!!

新しいLinuxの教科書

新しいLinuxの教科書