sdiffは対話形式で差分マージできますが、人ではなく、perlで対話させてみます。
IPC::Open2を使います。インストールから。
takk@deb8:~$ cpan install IPC::Open2
差分マージするのは、前回も使ったファイルaとb。pasteでみてみましょう。
takk@deb8:~$ 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:~$
以下のスクリプトで、左右の適用を指示します。
takk@deb8:~$ cat -n sdiff.pl
1 use IPC::Open2;
2
3 @cmd =(
4 'l',
5 'r',
6 'l',
7 'r',
8 'l',
9 'q',
10 );
11
12 open2(*IN, *OUT, "sdiff -o c a b");
13 do{
14 $str = shift @cmd;
15 print OUT "$str\n";
16 $_ =<IN>;
17 print;
18 } until(!$_);
19
20 close(IN);
21 close(OUT);
4行目〜9行目は、sdiffへ送信するコマンドです。
9行目のqコマンドでsdiffを終了します。
実行してみましょう。
takk@deb8:~$ perl sdiff.pl 1 1 2 | 20 %3 3 4 | 40 %5 5 6 | 60 %7 7 8 | 80 %9 9 10 | 100 takk@deb8:~$
perlスクリプトの指示通り、マージできたでしょうか。
takk@deb8:~$ paste a b c 1 1 1 2 20 2 3 3 3 4 40 40 5 5 5 6 60 6 7 7 7 8 80 80 9 9 9 10 100 10 takk@deb8:~$
出来てるようです。



コメント