概要
整列済みファイルを比較し、差集合と共通集合を列ごとに出力します。集合としての差分確認に向きます。
基本構文
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分ミッション
少しでも手を動かすと定着しやすくなります。終わった項目にチェックを入れてください。
-
comm -12で共通項目だけを抽出します。
-
comm -23とcomm -13で所属の違いを見ます。
資格試験との関連
-
LinuC レベル1
範囲: 1.03.2 フィルタを使ったテキストストリームの処理根拠: officialLinuCレベル1では、テキストの比較、抽出、整形、標準入出力の理解が問われます。
-
LPIC-1
範囲: 103.2 Process text streams using filters根拠: officialLPIC-1では、フィルタを使った比較、抽出、整形の理解が重視されます。
-
共通基礎
範囲: Linuxコマンド基礎根拠: editorial試験横断で、commはLinux運用の基礎体力を支える重要なコマンドです。
実行結果サンプル
-
printf "anbncn" > left.txt printf "bncndn" > right.txt comm left.txt right.txta b c d -
comm -12 left.txt right.txtb c
戻り値コード
- 0 正常終了。比較処理を完了しました。
- >0 ファイルを開けない、順序異常の扱いに失敗したなどで処理できませんでした。
使用例
comm users-before.txt users-after.txtcomm -12 installed.txt approved.txtsort 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. はい。整列済み入力が前提です。
参照リンク
- カテゴリー: Text Processing
- レベル: Practical
- 対応試験: LinuC, LinuC レベル1, LPIC, LPIC-1, 共通基礎