commコマンドの使い方を完全ガイド!2つのファイルを比較して共通点や違いを見つける方法
生徒
「同じような内容のテキストファイルが2つあるのですが、どこが同じでどこが違うのかを簡単に調べる方法はありますか?」
先生
「それならLinuxのcommコマンドが最適ですよ。2つのファイルを1行ずつ読み込んで、違いをパッと見やすく整理してくれます。」
生徒
「コマンドで比較するのって難しそうですね。私のような初心者でも使いこなせますか?」
先生
「使い方はとてもシンプルです。ただ、使う前に1つだけ大切な準備があるんです。そのコツさえ掴めば、大量のデータ比較も一瞬で終わりますよ。」
1. commコマンドとは?
commコマンドは、Linuxで「ソート(並び替え)済みの2つのファイルを比較する」ためのコマンドです。2つのファイルの中身を1行ずつ突き合わせて、次の3つの情報を横に並べて表示してくれます。
- 1つ目のファイルにしかない行
- 2つ目のファイルにしかない行
- 両方のファイルに共通している行
Windowsのエクセルで2つの表を見比べるような作業を、Linuxのターミナル(文字を入力する画面)で素早く行えるのが特徴です。例えば「会員リストA」と「会員リストB」を比較して、新しく増えた人や、両方に登録している人を見つけ出すといった作業に非常に向いています。
ちなみに、名前の由来は英語の「common(共通の)」からきています。まさに、共通点を見つけるための道具ですね。
2. commコマンドを使う前の大事なルール「ソート」
commコマンドには、絶対に守らなければならないルールがあります。それは、比較するファイルが五十音順やアルファベット順に並んでいなければならないということです。この「並び替え」のことをIT用語で「ソート」と呼びます。
なぜソートが必要なのでしょうか?それは、commコマンドがファイルの先頭から1行ずつ順番に比較していく仕組みだからです。バラバラな順番だと、コマンドが「どこまで探せば共通の行が見つかるか」を判断できず、正しい結果を出せません。
もしソートされていないファイルを比較しようとすると、実行したときに「ファイルがソートされていません」という注意メッセージが出てしまいます。比較する前には必ずsortコマンドを使ってファイルを綺麗に並び替えておきましょう。この準備さえできれば、commコマンドの基本はマスターしたも同然です。
3. commコマンドの基本的な使い方
それでは、実際にcommコマンドを使ってみましょう。まずは、中身がソートされている2つのテキストファイルを用意したと仮定します。基本の書き方は以下の通りです。
comm ファイル1 ファイル2
具体的な実行例を見てみましょう。ここでは「apple(りんご)」や「banana(バナナ)」が書かれた2つのリストを比較します。
comm file1.txt file2.txt
apple
banana
cherry
grape
lemon
この結果の見方には決まりがあります。左から順番に「3つの列」で表示されているのがわかりますか?
- 左端(1列目): 1つ目のファイル(file1.txt)にだけあるデータ
- 少し右(2列目): 2つ目のファイル(file2.txt)にだけあるデータ
- 一番右(3列目): 両方のファイルにある共通のデータ
このように、階段のような形で結果が表示されるので、どこに違いがあるのかが一目でわかります。パッと見て「3列目にあるものは同じなんだな」と判断できるのがcommコマンドの便利なポイントです。
4. 特定の列を非表示にするオプション
基本の使い方では3つの列がすべて表示されますが、実務では「共通している行だけ見たい」とか「1つ目のファイルにしかない差分だけを知りたい」という場面が多いです。そんなときに使うのが、数字のオプションです。
-1、-2、-3 というオプションを指定することで、その番号の列を表示しない(隠す)ことができます。ここが少しややこしいのですが、「指定した数字を表示する」のではなく「指定した数字を消す」という意味になります。
例えば、共通している行(3列目)だけを表示したい場合は、1列目と2列目を隠せばいいので、次のように書きます。
comm -12 file1.txt file2.txt
cherry
grape
逆に、1つ目のファイルにしかない項目だけを知りたい(2列目と3列目を消したい)ときは、次のように指定します。
comm -23 file1.txt file2.txt
apple
lemon
このように、表示したくない列の番号を組み合わせて指定することで、必要な情報だけを抽出することができます。これはデータのクレンジングや、プログラムの設定ファイルの比較などで非常によく使われるテクニックです。
5. ソートされていないファイルをその場で比較する方法
先ほど「事前にソートが必要」と説明しましたが、わざわざ別のファイルに保存し直してから比較するのは少し面倒ですよね。実は、Linuxの便利な機能を組み合わせることで、ソートされていないファイルもその場で並び替えながら比較することができます。
これを「プロセス置換」と呼びますが、初心者の方は「魔法の書き方」だと思って大丈夫です。次のように書きます。
comm <(sort list1.txt) <(sort list2.txt)
Blue
Red
Yellow
この書き方をすると、commコマンドが実行される直前にsortコマンドが中身を並び替えてくれるので、元のファイルがバラバラの順番でもエラーにならずに正しく比較できます。一歩進んだ使い方として覚えておくと、作業効率がぐんと上がりますよ。
6. diffコマンドとの違いは何?
Linuxには、ファイルを比較するコマンドとして他にも有名なdiffコマンドがあります。初心者の方は「どっちを使えばいいの?」と迷うかもしれません。それぞれの違いを簡単に整理しましょう。
diffコマンド: 主にプログラミングのソースコードなどを比較するために使われます。「どの行をどう変更すれば同じ内容になるか」という、修正の手順まで教えてくれるイメージです。行の順番が入れ替わっていても、中身の変化を細かく追ってくれます。
commコマンド: 主に「リスト(名簿、単語帳など)」を比較するために使われます。行の順番には厳格(ソート済みが前提)ですが、その分「両方にあるもの」「片方にしかないもの」を単純明快に仕分けしてくれます。
複雑なプログラムの変更点を確認したいならdiff、大量のキーワードリストやユーザーIDの重複チェックをしたいならcomm、というように使い分けるのがプロのやり方です。
7. commコマンドの実践的な活用例
最後に、実際の仕事や作業でcommコマンドがどのように役立つか、具体的なイメージを膨らませてみましょう。単なる操作方法だけでなく、使い道を知ることで学習のモチベーションも上がります。
例えば、あなたがWebサイトの管理を任されているとします。昨日までの利用者リストと、今日の利用者リストを比較して、「今日初めてサイトに来てくれた人」だけを特定したい場合にcommコマンドが活躍します。
comm -13 old_users.txt new_users.txt
user_04
user_09
上記のコマンドでは、-1(昨日のリストにしかない人を除外)と-3(昨日も今日もいる共通の人を除外)を指定しています。その結果、-2(今日のリストにだけ存在する人)だけが表示されるため、新規ユーザーを簡単に見つけ出せるのです。
このように、文字データの集合から特定の条件でデータを抜き出す作業は、ITの世界では「データ抽出」と呼ばれ、非常に重要視されるスキルです。手作業だと数時間かかるような比較も、コマンドを使えばたった数秒でミスなく完了します。
8. 注意点とよくあるミス
commコマンドを使う上で、初心者がつまづきやすいポイントがいくつかあります。まず1つ目は、「全角文字と半角文字の違い」です。人間が見ると「A」と「A」は同じに見えますが、コンピューターは全く別の文字として扱います。比較する際は、文字の種類が統一されているか確認しましょう。
2つ目は、「空白(スペース)の存在」です。行の最後に余計なスペースが入っているだけで、見た目が同じでも「違う行」として判定されてしまいます。もし期待通りの結果にならない場合は、ファイルの中に目に見えない不要な文字が含まれていないか注意してみてください。
3つ目は、「大文字と小文字の区別」です。デフォルトでは「Apple」と「apple」は別のものとして扱われます。もしこれらを同じものとして比較したい場合は、あらかじめすべての文字を小文字に変換するなどの処理が必要になります。
これらの細かい点に気をつけるだけで、トラブルのほとんどを防ぐことができます。コマンドは非常に正直なので、こちらが正しくデータを整えてあげれば、必ず正確な答えを返してくれます。焦らずに、まずは小さなファイルで練習することから始めてみてくださいね。
まとめ
今回の記事では、Linux環境でテキストファイルの比較を行う際に非常に強力なツールとなるcommコマンドについて詳しく解説してきました。 初心者の方にとっては、一見すると地味なコマンドに見えるかもしれませんが、サーバー管理やログ解析、ユーザーリストの突合など、実務の現場では欠かせない技術の一つです。 特に「ソート(並び替え)済み」という前提条件があるからこそ、動作が非常に軽量であり、数万行、数百万行という巨大なファイル同士であっても、一瞬でその共通点や相違点を洗い出すことが可能です。
commコマンドの重要ポイントを再確認
まず、commコマンドを使用する上で最も重要なのは、比較対象となるファイルがアルファベット順や数値順にソートされていることです。 これを忘れて実行してしまうと、本来共通しているはずの行が見落とされてしまったり、不正確な結果が表示されてしまったりします。 もしソートが手間だと感じる場合は、第5章で紹介した「プロセス置換」を活用して、その場でソートをかけながら比較するテクニックを思い出してください。
実務で使える実践的なサンプル
実際の現場でどのようにコマンドが入力されるのか、具体的な応用例を見てみましょう。 例えば、旧システムと新システムのユーザーIDリストを比較し、新システムに移行していない(旧システムにだけ存在する)ユーザーを抽出したい場合は、以下のような手順を踏みます。
cat old_list.txt
user101
user103
user105
cat new_list.txt
user101
user102
user105
上記のファイルを比較し、1列目(1つ目のファイルにしかないデータ)だけを表示したい場合は、2列目と3列目を非表示にするオプション -23 を使用します。
comm -23 old_list.txt new_list.txt
user103
このように、オプションを数字の組み合わせで指定するだけで、フィルタリング作業が完了します。 これはエクセルで「VLOOKUP関数」を駆使して差分を見つけるよりも、はるかに迅速でミスが少ない方法です。
検索エンジンでよく調べられる関連スキル
Linuxコマンドをマスターする過程で、commと一緒に覚えておきたいのが、パイプライン(|)を使った組み合わせ技です。
例えば、比較結果の行数をカウントしたい場合は wc -l コマンドと組み合わせることで、「共通するユーザーが何人いるか」という統計データもすぐに取得できます。
IT業界では、こうした複数のコマンドを組み合わせて定型業務を自動化するシェルスクリプトの作成能力も高く評価されます。
今回学んだcommコマンドの基本、オプションの仕組み、ソートの重要性、そしてdiffコマンドとの明確な違い。 これらを理解していれば、あなたはもう初心者レベルを脱し、実用的なファイル操作のスキルを身につけたと言えるでしょう。 日々の業務や学習の中で、テキストデータの処理が必要になった際は、ぜひcommコマンドを真っ先に思い出して活用してみてください。
生徒
先生、ありがとうございました。commコマンドって、最初は「列がずれて表示される不思議なコマンドだな」と思いましたが、実はすごく論理的な表示形式なんですね。
先生
そうですね。あの3列の表示形式は、視覚的に「ファイル1のみ」「ファイル2のみ」「共通」を分けてくれるので、慣れると一瞬で状況が把握できるんですよ。
生徒
特にオプションの -123 の考え方が面白かったです。「表示したい列を選ぶ」んじゃなくて「表示したくない列を消す」という逆転の発想が、最初は少し混乱しましたけど。
先生
確かにそこは初心者が一番間違えやすいポイントです。例えば、共通している行だけ見たいときは -12 を指定して、1列目と2列目を「引き算」するイメージで覚えるといいですよ。
生徒
なるほど、引き算ですね。あと、ソートについてもよくわかりました。さっき自分で試してみたんですけど、ソートを忘れたらエラーメッセージが出ちゃいました。でもプロセス置換を使えば解決ですね。
先生
素晴らしい!すぐに実践してみるのはとても良いことです。プロセス置換 <(sort file) は、ルート権限でログファイルを調査するときなんかにもよく使われます。実際の運用現場では、こんなふうに使うこともありますよ。
comm -12 <(sort user_list_2025.txt) <(sort user_list_2026.txt) | head -n 5
admin_user
power_user
root
staff_01
staff_02
生徒
わあ、カッコいい! head コマンドまで組み合わせて、最初の数行だけ確認しているんですね。これなら大きなファイルでも中身をチラ見できて便利そうです。
先生
その通りです。Linuxのコマンドは一つ一つがシンプルですが、パズルのように組み合わせることで無限の可能性が広がります。commコマンドも、そのパズルの大事なピースの一つですよ。これからもたくさん触れて、自分の手に馴染ませていってくださいね。
生徒
はい!「差分を出すならdiff、リストの比較ならcomm」という使い分けも忘れずに、どんどん活用してみます。今日は本当に勉強になりました。