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:~$
出来てるようです。
コメント