sdiffをperlと対話させる

6-1.比較・差分

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:~$ 

出来てるようです。

コメント

タイトルとURLをコピーしました