sdiffで対話的にマージする

sdiffを使って差分のあるファイルのマージをしてみます。
まずは実験ファイルの作成をします。数列が格納されたファイルaを作り、ファイルbへコピーし、ファイルbの偶数行目に差分を施します。

takk@deb8:~/tmp$ seq 10 >a
takk@deb8:~/tmp$ cp a b

偶数行への修正はsedでフィルタリング。

takk@deb8:~/tmp$ sed -i '2~2s/$/0/' b

aとbを並べてみると、

takk@deb8:~/tmp$ paste a b
1	1
2	20
3	3
4	40
5	5
6	60
7	7
8	80
9	9
10	100
takk@deb8:~/tmp$ 

さて、この2つのファイルをマージしましょう。マージした結果はファイルcへ格納します。

takk@deb8:~/tmp$ sdiff a b -o c
1                                                               1
2                                                             | 20
%

差分がある箇所でプロンプト%が表示され、入力を促します。
ここでは左を適用したいので、lを入力してEnterします。

%l
3                                                               3
4                                                             | 40
%

残りは全部右を選択します。rを入力。

%r
5                                                               5
6                                                             | 60
%r
7                                                               7
8                                                             | 80
%r
9                                                               9
10                                                            | 100
%r
takk@deb8:~/tmp$ 

a b cを並べて見てみましょう。

takk@deb8:~/tmp$ paste a b c
1	1	1
2	20	2
3	3	3
4	40	40
5	5	5
6	60	60
7	7	7
8	80	80
9	9	9
10	100	100
takk@deb8:~/tmp$ 

意図したマージになっています。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA