連載
» 2021年05月13日 05時00分 公開

脱目視確認DX テキストもバイナリもfcコマンドで簡単・確実差分チェックマウスのいらないコマンドプロンプトの世界

案内状などを送付する際、間違いがないかどうか2つのリストの違いを見つけなければならないことはないだろうか? こんな場合、リストの行を順番に見比べるのは大変。WordやExcelを使ってやれないことはないが、単純なリストの比較なら、コマンドプロンプト上でfcコマンドを使えば一発だ!

[竹内充彦,著]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

リストの違いを見比べるのはかなり神経を使う作業 リストの違いを見比べるのはかなり神経を使う作業
2つのリストの違いを見つける際、印刷した紙を並べて見比べたり、Excelで列に並べて見比べたりしていないだろうか。1つずつ2つのリストに違いがないかを確認するのはかなり神経を使う。単純なリストなら、コマンドプロンプトを起動し、fcコマンドを使えば一発で終わるぞ!

膨大な量の2つのリストの比較って普段どうしてる?

 膨大な項目からなるリストが収められた2つのテキストファイルがある。もし、その2つの内容が同じかどうかをチェックするとしたら、あなたはどうやるだろうか?

 紙に印刷して、2つのリストを並べ、定規を当てながら行単位で両者を見比べていくというのは、元がデジタルデータなのに、手法がアナログ過ぎる。そもそもリストが数百行、数千行あったとしたら、人間が見比べていくうちにミスが起きかねない。

 こういう正確さが求められる単純作業こそ、コンピュータにやらせるべきだ。

【今回のミッション】

 印鑑を押すためどころか、PCを使うために出社しなければならないという前時代的な当社で、また退社時刻5分前に上司が面倒な仕事を押し付けてきた。

 3カ月後に開催する予定の国際交流イベントを当社がサポートすることになったのだが、出展国を歓迎する意味を込めて各国の国旗を用意することになった。「もし、手配に抜かりがあれば出展国に対して非礼に当たり、外交問題に発展しかねない」と脅された。いや、さすがにそれは大げさだと思うが、確かに不手際があっては相手国に申し訳ない。

 そこで、こちらで取りまとめた参加国リスト「list1.txt」と、手配業者がそこに手を加えた国旗の在庫リスト「list2.txt」とを照合することになった。参加国と地域は200近くある。さて、どうしよう。


 「Microsoft Word(ワード)」には、2つのファイルを比較する、その名も「比較」という機能が用意されている。文書全般を扱う高機能なソフトウェアだけに、この「比較」の機能も至れり尽くせりで、複数のペインを開き、両者の違いを文字単位で示してくれる。

Wordの「比較」を利用した2つのファイルの比較 Wordの「比較」を利用した2つのファイルの比較
Wordにも2つの文書を比較して違いを示してくれる機能がある。高度な編集機能も用意されているため、違いを確認した後で編集するような作業に向いている。

 だが、この機能を利用するには、Wordを起動し、[校閲]タブを選択して、[比較]を実行。[比較]ダイアログボックスから、比較対象となる2つのファイルをそれぞれ[ファイルを開く]ダイアログから指定しなければならない。

 比較的長めの文章で構成された2つのファイルを比較し、必要に応じて文章を修正するのならば、間違いなくWordを使った方が便利である。その方が結果として早く目的を達せられるからだ。しかし、「単純な項目リストの抜けをチェックするだけ」ならば、もっと手軽な方法がある。そちらを使った方が結果として早く目的を達せられる。

 こういうときに頼りになるのがコマンドプロンプトだ。Windows OSには、もともと2つのファイルを比較して両者の差分を行単位で表示してくれる単機能で手軽な「fcコマンド」(fcはFile Compareの意味から)が用意されている。

fc /N list1.txt list2.txt[Enter]


fcコマンドで2つのファイルを比較して差分を出力する

fcコマンドを使って2つのファイルの違いを比較する

 このコマンドを実行すると「list1.txt」と「list2.txt」という2つのファイルを比較し、行単位での違い(以下、不一致行と呼ぶ)を表示してくれる。「/N」は行番号を表示するというオプションスイッチだ。ちなみに、ここでは詳しく解説しないが、/Bオプションを使うと、2つのバイナリファイルの比較も可能だ。新旧のプログラムファイルを比較することもできるわけだ。

 不一致行が多いと、画面がスクロールしてしまい、最初の方の結果がすぐに見えなくなってしまうので、実際に使うときには、パイプラインでmoreコマンドに渡すか、リダイレクト(>)で別ファイルに保存するとよいだろう。

fc /N list1.txt list2.txt | more[Enter]


fcコマンドの出力をmoreコマンドによりページ単位で表示する

fc /N list1.txt list2.txt > difference.txt[Enter]


fcコマンドの出力をリダイレクトで「difference.txt」に出力する

fcコマンドで2つのファイルを比べて差分を確認する fcコマンドで2つのファイルを比べて差分を確認する
fcコマンドは指定した2つのファイルを比較して、両者の差分を表示してくれる。

 なお、このとき、行番号は論理行を基準に表示されることに注意しよう。論理行とは、画面に表示される物理的な行ではなく、[Enter]キーで入力される改行コードまでの一連の文字列を1行として数えたときの行番号である。画面上は複数行に渡る文章も、論理行では改行までなので1行になる。

fcコマンドの出力結果を読み取るコツ

 fcコマンドは、使い方はとても簡単だが、結果表示を読み取るのに若干のコツが必要なので、ここで紹介しておこう。

 fcコマンドでは、基本的に2つのファイルの不一致行を、共通する部分(以下、一致行と呼ぶ)で挟む形式で表示する。

fcコマンドの出力形式 fcコマンドの出力形式
fcコマンドが差分を表示する際、原則として前後の一致行で、不一致行を挟む形式で表示する。

 では表示結果の具体例を見ていこう。まず、一方のファイルには存在するが他方のファイルには存在しない場合の表示だ。結果は分かりやすく、どちらのファイルのどの行が抜けているのかが一目瞭然だ。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

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

メールマガジン登録

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