目次
diffとは
diffとは2つのテキストファイル同士を比較して異なる箇所を表示するLinuxのプログラムです。csvなどのテキストデータや、ソフトウェア開発にあたってのソースファイルなどの更新点のチェックに使用します。
Windowsにもdiffの代わりに使える差分出力ソフトがあります。無料で使えるソフトウェアも多数ありますが、業務などで指定以外のソフトウェアを使用出来ない場合や、手っ取り早く比較したい場合にdiffの代わりに使うコマンドと使用法を解説します。
Windowsにはdiffコマンドはありませんが、プログラミングの話題でファイルの差分を取る時に慣用的に「diff(ディフ)を取る」などと言う事がありますので、知識として覚えておきましょう。
Windows標準コマンドでテキストファイルの差分を取る方法
Windows標準のコマンドにはdiffの代わりに「fc.exe」というものがあります。
コマンドプロンプトを起動し、コマンド説明を見てみます。例は標準のコマンドプロンプト、ユーザー名が「user」の場合です。
1
|
C:\Users\user>help fc
|
もしくは「fc /?」でも可能です。
1
|
C:\Users\user>fc /?
|
Windowsで「fc.exe」を使って差分を取る方法
diffの代わりにWindowsのコマンド「fc.exe」を使って差分を取る方法です。
「fc.exe」は比較対象の二つのファイル名を指定すれば使えます。ヘルプで言う、「[ドライブ1:][パス1]ファイル名1」と、「[ドライブ2:][パス2]ファイル名2」が相当します。
ファイルがコマンドプロンプトに表示されているカレントディレクトリーにあればドライブ名とパス名、指定ドライブのカレントディレクトリーにあればパス名を省略できるので、ドライブとパス指定の部分が「[ ]」で囲まれています。
ファイルの指定方法はdiffも「fc.exe」も同じです。
例えばカレントディレクトリーが「C:\Users\user」の場合に、「C:\data」フォルダで「001.csv」と「002.csv」を比較する場合は、以下のようにカレントディレクトリーの移動とファイル比較のコマンドを入力します。
1
2
3
|
C:\Users\user>cd c:\data
C:\data>fc 001.csv 002.csv
|
Windowsのコマンド「fc.exe」でファイルを比較する
実際にWindowsのコマンド「fc.exe」を使ってファイルを比較します。
まずは例として比較対象のファイル「001.csv」と「002.csv」を以下の内容でC:\dataというフォルダーに作ったとします。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
C:\data>type 001.csv
ID,種類,品名,価格
A001,食料品,卵,400
A002,衣類,手袋,500
A003,文房具,鉛筆,100
A004,文房具,ボールペン,200
A005,文房具,シャープペン,200
A006,文房具,消しゴム,150
A010,食料品,牛乳,370
C:\data>type 002.csv
ID,種類,品名,価格
A001,食料品,卵,400
A002,衣類,手袋,550
A003,文房具,鉛筆,100
A004,文房具,ボールペン,200
A006,文房具,消しゴム,150
A010,食料品,牛乳,400
A011,衣類,帽子,2000
C:\data>
|
二つのファイルの違いは、「ID」が「A002」の項目「価格」がそれぞれ「500」、「550」であること、「ID」が「A005」の行が001.csvにしかないこと、「ID」が「A010」の項目「価格」がそれぞれ「370」、「400」であること、「ID」が「A011」の行が002.csvにしかないことです。
この二つのファイルの差分を「fc.exe」で取ると以下のようになります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
C:\data>fc 001.csv 002.csv
ファイル 001.csv と 002.CSV を比較しています
***** 001.csv
A001,食料品,卵,400
A002,衣類,手袋,500
A003,文房具,鉛筆,100
***** 002.CSV
A001,食料品,卵,400
A002,衣類,手袋,550
A003,文房具,鉛筆,100
*****
***** 001.csv
A004,文房具,ボールペン,200
A005,文房具,シャープペン,200
A006,文房具,消しゴム,150
A010,食料品,牛乳,370
***** 002.CSV
A004,文房具,ボールペン,200
A006,文房具,消しゴム,150
A010,食料品,牛乳,400
A011,衣類,帽子,2000
*****
C:\data>
|
Linuxのdiffとは違ってWindowsの「fc.exe」では、相違する行の上下の行も表示されます。相違する行の表示が連続する場合は連続した相違部分として表示され、相違する行の前後に行がなければ表示されません。
Windowsのコマンド「fc.exe」で使えるオプション
Windowsのコマンド「fc.exe」にはいくつかオプションがあり、挙動を変更できます。テキストの比較で表示フォーマットを変更する、「/A」、「/N」、「/nnnn」について解説します。
「/A」オプション
「/A」オプションは相違部分の1行目と最後の行だけを表示します。「fc.exe」の仕様として、相違する行の前後も表示されますので、多くの場合、一致する行が表示されます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
C:\data>fc /A f:001.csv f:002.csv
ファイル F:001.csv と F:002.CSV を比較しています
***** F:001.csv
A001,食料品,卵,400
A002,衣類,手袋,500
A003,文房具,鉛筆,100
***** F:002.CSV
A001,食料品,卵,400
A002,衣類,手袋,550
A003,文房具,鉛筆,100
*****
***** F:001.csv
A004,文房具,ボールペン,200
...
A010,食料品,牛乳,370
***** F:002.CSV
A004,文房具,ボールペン,200
...
A011,衣類,帽子,2000
*****
C:\data>
|
このように、相違点として表示する行が3行だと変わらず、4行以上の場合に間の行を「…」と表示します。
「/N」オプション
Windowsの「fc.exe」コマンドの「/N」オプションは、相違部分の表示に指定ファイルそれぞれの行番号を付加します。行番号と相違部分の表示は「:」記号で区切られます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
C:\data>fc /N 001.csv 002.csv
ファイル 001.csv と 002.CSV を比較しています
***** 001.csv
2: A001,食料品,卵,400
3: A002,衣類,手袋,500
4: A003,文房具,鉛筆,100
***** 002.CSV
2: A001,食料品,卵,400
3: A002,衣類,手袋,550
4: A003,文房具,鉛筆,100
*****
***** 001.csv
5: A004,文房具,ボールペン,200
6: A005,文房具,シャープペン,200
7: A006,文房具,消しゴム,150
8: A010,食料品,牛乳,370
***** 002.CSV
5: A004,文房具,ボールペン,200
6: A006,文房具,消しゴム,150
7: A010,食料品,牛乳,400
8: A011,衣類,帽子,2000
*****
C:\data>
|
「/nnnn」オプション
Windowsの「fc.exe」コマンドの「/nnnn」オプションは「nnnn」の部分には数字が入ります。この数字が一致部分と判断する行数を指定します。
相違部分をまとめて表示したい場合は大きく、出来るだけ個別に表示したい場合は小さく設定します。デフォルトでは「/2」が指定されています。
「/1」を指定した場合は以下の通りです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
C:\data\>fc /1 001.csv 002.csv
ファイル 001.csv と 002.CSV を比較しています
***** 001.csv
A001,食料品,卵,400
A002,衣類,手袋,500
A003,文房具,鉛筆,100
***** 002.CSV
A001,食料品,卵,400
A002,衣類,手袋,550
A003,文房具,鉛筆,100
*****
***** 001.csv
A004,文房具,ボールペン,200
A005,文房具,シャープペン,200
A006,文房具,消しゴム,150
***** 002.CSV
A004,文房具,ボールペン,200
A006,文房具,消しゴム,150
*****
***** 001.csv
A006,文房具,消しゴム,150
A010,食料品,牛乳,370
***** 002.CSV
A006,文房具,消しゴム,150
A010,食料品,牛乳,400
A011,衣類,帽子,2000
*****
C:\data>
|
デフォルトでは相違部分が2つの表示でしたが、「/1」を指定すると3つに分けて表示されています。
「/2」を指定した場合は以下の通り、デフォルトと同様になります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
C:\data>fc /2 001.csv 002.csv
ファイル 001.csv と 002.CSV を比較しています
***** 001.csv
A001,食料品,卵,400
A002,衣類,手袋,500
A003,文房具,鉛筆,100
***** 002.CSV
A001,食料品,卵,400
A002,衣類,手袋,550
A003,文房具,鉛筆,100
*****
***** 001.csv
A004,文房具,ボールペン,200
A005,文房具,シャープペン,200
A006,文房具,消しゴム,150
A010,食料品,牛乳,370
***** 002.CSV
A004,文房具,ボールペン,200
A006,文房具,消しゴム,150
A010,食料品,牛乳,400
A011,衣類,帽子,2000
*****
C:\data>
|
Windowsですぐにdiffを取る方法を覚えておきましょう
Windows標準でdiffを取る場合は「fc.exe」コマンドを使用します。相違する行の前後も表示される仕様ですので、とっさに使う必要が出来た時に使い慣れていれば混乱せずに済むでしょう。
インフラエンジニア専門の転職サイト「FEnetインフラ」
FEnetインフラはサービス開始から10年以上『エンジニアの生涯価値の向上』をミッションに掲げ、多くのエンジニアの就業を支援してきました。
転職をお考えの方は気軽にご登録・ご相談ください。