comm コム

英語表記comm

日本語表記整列済みファイル比較

正式名称comm

危険度安全

What does it mean?

整列済みファイルを比較し、差集合と共通集合を列ごとに出力します。集合としての差分確認に向きます。

Command Quest

comm を今日の道具にする

整列済みファイルを比較し、差集合と共通集合を列ごとに出力しま...

$ comm [オプション]... ファイル1 ファイル2
関連用語0
次のコマンド0
FAQ2
参照5

概要

整列済みファイルを比較し、差集合と共通集合を列ごとに出力します。集合としての差分確認に向きます。

基本構文

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

詳細解説

commは、二つの整列済みファイルを先頭から順に読み、行の大小関係を使って比較するコマンドです。第一列は1番目だけにある行、第二列は2番目だけにある行、第三列は両方にある行です。

重要なのは、入力が整列済みであることです。並び順が崩れていると結果を誤解しやすく、比較前にsortで同じ基準へそろえるのが基本です。

実務では、ユーザー一覧の差分確認、設定名の突合、配布対象と実在ファイルの照合などで役立ちます。diffが編集差分を見る道具なのに対し、commは所属の違いを集合的に見る道具です。

このコマンドを使う場面

二つの一覧の差分を集合として見たい時、共通項目だけを抽出したい時、棚卸し結果を突合したい時に使います。

まず安全に試す方法

1. printf "anbncn" > left.txt
2. printf "bncndn" > right.txt
3. comm left.txt right.txt
4. comm -12 left.txt right.txt

3分ミッション

少しでも手を動かすと定着しやすくなります。終わった項目にチェックを入れてください。

  1. comm -12で共通項目だけを抽出します。

  2. comm -23とcomm -13で所属の違いを見ます。

資格試験との関連

  • LinuC レベル1
    範囲: 1.03.2 フィルタを使ったテキストストリームの処理
    根拠: official
    LinuCレベル1では、テキストの比較、抽出、整形、標準入出力の理解が問われます。
  • LPIC-1
    範囲: 103.2 Process text streams using filters
    根拠: official
    LPIC-1では、フィルタを使った比較、抽出、整形の理解が重視されます。
  • 共通基礎
    範囲: Linuxコマンド基礎
    根拠: editorial
    試験横断で、commはLinux運用の基礎体力を支える重要なコマンドです。

オプション

  • -1
    1番目だけの行を表示しません。
    comm -1 a.txt b.txt
  • -2
    2番目だけの行を表示しません。
    comm -2 a.txt b.txt
  • -3
    共通行を表示しません。
    comm -3 a.txt b.txt
  • --check-order
    入力順序の崩れを検出しやすくします。
    comm --check-order a.txt b.txt

実行結果サンプル

  • printf "anbncn" > left.txt printf "bncndn" > right.txt comm left.txt right.txt
    a
    		b
    		c
    	d
  • comm -12 left.txt right.txt
    b
    c

戻り値コード

  • 0 正常終了。比較処理を完了しました。
  • >0 ファイルを開けない、順序異常の扱いに失敗したなどで処理できませんでした。

使用例

  • comm users-before.txt users-after.txt
  • comm -12 installed.txt approved.txt
  • sort a.txt > a.sorted && sort b.txt > b.sorted && comm a.sorted b.sorted

よくあるエラー

  • 結果がおかしい
    原因: 入力が整列されていないか、整列基準がそろっていません。
    対処: 同一ロケールでsortしてから比較します。
  • 空白や大文字小文字の違いで別行になった
    原因: 前処理なしでは表記揺れを吸収しません。
    対処: trやsed、awkで前処理してから比較します。

導入・互換性情報

POSIXで基本動作は標準化されています。GNU実装では--check-orderなどの順序確認補助があります。

注意点 / セキュリティリスク

危険度は低いですが、整列されていない入力を比較すると誤診断の原因になります。ロケール差でsort結果が変わる点にも注意が必要です。

FAQ

  • Q. diffと何が違いますか。
    A. diffは編集差分、commは一覧の差集合と共通集合を確認する道具です。
  • Q. 並び順が違うだけでも変わりますか。
    A. はい。整列済み入力が前提です。

参照リンク

関連記事