comm コマンドは、2 つのソートされたファイルを比較して、共通する行やそれぞれのファイルにのみ含まれる行を出力するコマンドです。GNU coreutils に含まれており、Linux では GNU 版が、FreeBSD では BSD 版が提供されています。基本的な動作は共通していますが、細かなオプションが異なることがあります。

基本的な使い方

編集
comm [オプション] ファイル1 ファイル2

ファイル1ファイル2 はそれぞれソート済みのテキストファイルでなければなりません。このコマンドは、ファイル1ファイル2 を比較し、共通する行と、それぞれのファイルにのみ含まれる行を出力します。

出力の形式

編集

出力は 3 列に分かれます:

  1. ファイル1 のみに含まれる行
  2. ファイル2 のみに含まれる行
  3. 両方のファイルに共通する行

それぞれの列はタブで区切られます。

主なオプション(GNU coreutils版)

編集
主なオプション
オプション 説明
-1 ファイル1 のみに含まれる行を出力しない
-2 ファイル2 のみに含まれる行を出力しない
-3 共通する行を出力しない
-u 重複する行を表示しない
-i 大文字と小文字を区別しない

2 つのファイルを比較

編集
comm file1.txt file2.txt

file1.txtfile2.txt を比較し、共通する行、file1.txt のみに含まれる行、file2.txt のみに含まれる行を表示します。

ファイル1 のみに含まれる行を出力しない

編集
comm -1 file1.txt file2.txt

file1.txt のみに含まれる行を出力せず、file2.txt のみに含まれる行と共通する行だけを表示します。

重複行を表示しない

編集
comm -u file1.txt file2.txt

重複した行を省略して、両方のファイルに共通する行のみを表示します。

FreeBSD 版との違い

編集

comm コマンドは FreeBSD でも提供されていますが、GNU 版といくつか異なる挙動がある場合があります。

主な違い

編集
  1. オプションの違い
    FreeBSD 版では一部オプションが異なる場合があります。たとえば、-u オプションで重複行を表示しない機能がない場合があります。
  2. GNU coreutils 版を FreeBSD で使う方法
    coreutils パッケージをインストールすると、GNU 版の comm コマンドが gcomm という名前で使えるようになります。
    pkg install coreutils
    gcomm -1 file1.txt file2.txt  # GNU coreutils 版の comm
    

詳しくは、それぞれの環境で man comm を確認してください。