【 comm 】コマンド――ソート済みのテキストファイルを比較するLinux基本コマンドTips(99)

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「comm」コマンドです。

» 2017年03月31日 05時00分 公開
[西村めぐみ@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、ソート済みのテキストファイルを比較する「comm」コマンドです。

commコマンドとは?

 「comm」は、テキストファイルを比較するコマンドです。「comm ファイル1 ファイル2」で2つのテキストファイルを比較し、ファイル1だけにある行、ファイル2だけにある行、共通している行を出力します。比較するファイルはソートされている必要があります。



commコマンドの書式

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

※[ ]は省略可能な引数を示しています




commコマンドの主なオプション

 commコマンドの主なオプションは次の通りです。

短いオプション 長いオプション 意味
-1 1列目(ファイル1のみに含まれる行)を出力しない
-2 2列目(ファイル2のみに含まれる行)を出力しない
-3 3列目(両方のファイルに含まれる行)を出力しない
--check-order 全ての行の組み合わせが一致していても、ソートされているかどうかを確認する
--nocheck-order 入力が正しくソートされているかどうかを確認しない
--output-delimiter=文字列 列を区切る文字列を指定する(デフォルトはTAB)


2つのテキストファイルを比較する

 「comm ファイル1 ファイル2」で、2つのテキストファイル(ファイル1、ファイル2)を比較します。比較するファイルは、「sort」コマンド(本連載第63回参照)などを使って事前にソートされている必要があります。

 結果は「ファイル1のみにある行 ファイル2のみにある行 両方にある行」の3列で出力されます。列の区切りはタブ(TAB)で、「--output-delimiter」オプションで変更することができます。例えば、区切りを「カンマ(,)」にしたい場合は、「--output-delimiter=,」のように指定します。空白を含む文字列などにしたい場合は引用符(")で囲んでください。

コマンド実行例

comm ファイル1 ファイル2

(ファイル1とファイル2を比較する)(画面1

comm --output-delimiter="," ファイル1 ファイル2

(比較した結果をカンマ区切りで表示する)


画面1 画面1 commコマンドで2つのファイルを比較した結果

 なお、ファイルがソートされていない場合は、その旨のメッセージが表示されます(画面2)。

画面2 画面2 ファイルがソートされていないと、その旨のメッセージが表示される


共通している行だけを表示する

 「-1」「-2」「-3」オプションで、“表示しない列”を指定できます。「-1」は1列目(ファイル1のみに含まれる行)、「-2」は2列目(ファイル2のみに含まれる行)、「-3」は3列目(両方のファイルに含まれる行)を表示しません。

 共通している行、つまり3列目を出力したくない場合は「-3」、共通している行だけ出力したい場合は「-12」のように指定します(画面3)。

コマンド実行例

comm -3 ファイル1 ファイル2

(共通している行は出力しない)

comm -12 ファイル1 ファイル2

(共通している行だけ出力する)


画面3 画面3 「-1」「-2」「-3」オプションで、表示しない列を指定できる


筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801NからのDOSユーザー(LinuxはPC-486DXから)。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、ライターとして活動。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。