Friday, January 05, 2007

diff の出力の見方

Unix の diff コマンドは、 ファイルを1行ずつ比較していって、その差分を出力する。その出力の見方を今まであいまいにしてきたので、ひとつ調べてみた。

まず、1.txt を次のように作る。

1:Jan
2:Feb
3:Mar
4:Apr
5:May
6:
7:Jun
8:
9:Jul
10:Aug
11:Sep
12:Oct
13:Nov
14:Dec


数字とコロンは行番号を示すためのもので、ファイルには実際に書き込まれていない。もう1つ 2.txt として


1:Jan
2:Feb
3:Mar
4:4
5:four
6:May
7:6
8:six
9:sex
10:
11:Jun
12:
13Jul
14:Aug
15:Sep
16:Oct
17:Nov
18:Dec


この2つのファイルを diff に渡して

diff 1.txt 2.txt

とすると、その出力は、


4c4,5
< Apr
---
> 4
> four
5a7,9
> 6
> six
> sex


となる。これはどういう意味かというと、1つめのファイルの4行目を change して2つ目のファイルの4行目から5行目にする。さらに1つ目のファイルの5行目の直ぐ下に2つ目のファイルの7行目から9行目を Add する。こうすると1つ目のファイルが2つ目のファイルと等しくなる、ということだ。

< で始まる行が1つ目のファイルの対応行であり、> で始まる行が2つ目のファイルの対応行だ。Add の場合は、1つ目のファイルの対応行は示されていないが、これはとくに必要ないからだ。

diff に渡すファイルの順序を入れ替えて

diff 2.txt 1.txt

とすると、さっきの出力と論理的に反対の結果が得られる。


4,5c4
< 4
< four
---
> Apr
7,9d5
< 6
< six
< sex


7,9d5 というのは、先ほどの 5a7,9 とちょうど逆の操作なのだが、うまく文章にできない。要するに7行目から9行目を Delete しろということだ。

No comments: