案内状などを送付する際、間違いがないかどうか2つのリストの違いを見つけなければならないことはないだろうか? こんな場合、リストの行を順番に見比べるのは大変。WordやExcelを使ってやれないことはないが、単純なリストの比較なら、コマンドプロンプト上でfcコマンドを使えば一発だ!
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
膨大な項目からなるリストが収められた2つのテキストファイルがある。もし、その2つの内容が同じかどうかをチェックするとしたら、あなたはどうやるだろうか?
紙に印刷して、2つのリストを並べ、定規を当てながら行単位で両者を見比べていくというのは、元がデジタルデータなのに、手法がアナログ過ぎる。そもそもリストが数百行、数千行あったとしたら、人間が見比べていくうちにミスが起きかねない。
こういう正確さが求められる単純作業こそ、コンピュータにやらせるべきだ。
印鑑を押すためどころか、PCを使うために出社しなければならないという前時代的な当社で、また退社時刻5分前に上司が面倒な仕事を押し付けてきた。
3カ月後に開催する予定の国際交流イベントを当社がサポートすることになったのだが、出展国を歓迎する意味を込めて各国の国旗を用意することになった。「もし、手配に抜かりがあれば出展国に対して非礼に当たり、外交問題に発展しかねない」と脅された。いや、さすがにそれは大げさだと思うが、確かに不手際があっては相手国に申し訳ない。
そこで、こちらで取りまとめた参加国リスト「list1.txt」と、手配業者がそこに手を加えた国旗の在庫リスト「list2.txt」とを照合することになった。参加国と地域は200近くある。さて、どうしよう。
「Microsoft Word(ワード)」には、2つのファイルを比較する、その名も「比較」という機能が用意されている。文書全般を扱う高機能なソフトウェアだけに、この「比較」の機能も至れり尽くせりで、複数のペインを開き、両者の違いを文字単位で示してくれる。
だが、この機能を利用するには、Wordを起動し、[校閲]タブを選択して、[比較]を実行。[比較]ダイアログボックスから、比較対象となる2つのファイルをそれぞれ[ファイルを開く]ダイアログから指定しなければならない。
比較的長めの文章で構成された2つのファイルを比較し、必要に応じて文章を修正するのならば、間違いなくWordを使った方が便利である。その方が結果として早く目的を達せられるからだ。しかし、「単純な項目リストの抜けをチェックするだけ」ならば、もっと手軽な方法がある。そちらを使った方が結果として早く目的を達せられる。
こういうときに頼りになるのがコマンドプロンプトだ。Windows OSには、もともと2つのファイルを比較して両者の差分を行単位で表示してくれる単機能で手軽な「fcコマンド」(fcはFile Compareの意味から)が用意されている。
fc /N list1.txt list2.txt[Enter]
このコマンドを実行すると「list1.txt」と「list2.txt」という2つのファイルを比較し、行単位での違い(以下、不一致行と呼ぶ)を表示してくれる。「/N」は行番号を表示するというオプションスイッチだ。ちなみに、ここでは詳しく解説しないが、/Bオプションを使うと、2つのバイナリファイルの比較も可能だ。新旧のプログラムファイルを比較することもできるわけだ。
不一致行が多いと、画面がスクロールしてしまい、最初の方の結果がすぐに見えなくなってしまうので、実際に使うときには、パイプラインでmoreコマンドに渡すか、リダイレクト(>)で別ファイルに保存するとよいだろう。
fc /N list1.txt list2.txt | more[Enter]
fc /N list1.txt list2.txt > difference.txt[Enter]
なお、このとき、行番号は論理行を基準に表示されることに注意しよう。論理行とは、画面に表示される物理的な行ではなく、[Enter]キーで入力される改行コードまでの一連の文字列を1行として数えたときの行番号である。画面上は複数行に渡る文章も、論理行では改行までなので1行になる。
fcコマンドは、使い方はとても簡単だが、結果表示を読み取るのに若干のコツが必要なので、ここで紹介しておこう。
fcコマンドでは、基本的に2つのファイルの不一致行を、共通する部分(以下、一致行と呼ぶ)で挟む形式で表示する。
では表示結果の具体例を見ていこう。まず、一方のファイルには存在するが他方のファイルには存在しない場合の表示だ。結果は分かりやすく、どちらのファイルのどの行が抜けているのかが一目瞭然だ。
Copyright© Digital Advantage Corp. All Rights Reserved.