プロが教える店舗&オフィスのセキュリティ対策術

UNIXで二つのファイルを使って別ファイルを出力する
処理をしたいのですが、awkで二つのファイルを扱う方法
が分かりませんでした。
やりたい処理は以下のような事です。

ファイルAの1行目"AAA B"と同じ行がファイルBにあったら、ファイルAの"AAA B"の次の行に、
ファイルBの次の行"YYY bbb"を挟み込みます。

もし、ファイルBに同じ行がなかったら、
ファイルAの次の行に"NG"を挟み込みます。

[ファイルA]
AAA B
ZZZ B
AAA C
ZZZ C
AAA D
ZZZ D

[ファイルB]
AAA B
YYY bbb
AAA C
YYY bbb

[出力ファイル]
AAA B
YYY bbb
ZZZ B
AAA C
YYY ccc
ZZZ C
AAA D
NG

どなたか良いスクリプトありましたら
教えていただけないでしょうか。
よろしくお願いします。

A 回答 (2件)

perlで書くと、こんな感じでしょうか:



% cat a.pl
open( FA, $ARGV[0] ) or die;
open( FB, $ARGV[1] ) or die;
while ( $a = <FA> ){
print $a;
if ( eof( FB ) ){ undef $b; } else { $b = <FB>; }
print "NG\n" unless $a eq $b;
last unless defined( $b );
$a2 = <FA>;
$b2 = <FB>;
print $b2, $a2 if $a eq $b;
}

質問で出ている例だと、処理できますが、それ以外の場合は動作保証外ですな。
    • good
    • 0
この回答へのお礼

スクリプトありがとうございます。
試してみると、確かに出力結果が正しく出てくれました。
あとは、fileAの行が入れ替わっていても、差込が出来るように拡張してみたいと思います。
ただ、perlはawk以上に初心者なので、これを機会に勉強してみようと思います。
ありがとうございました。

お礼日時:2004/02/15 12:03

そういうときはdiffコマンドを使うと便利です。



参考URL:http://www.linux.or.jp/JM/html/gnumaniak/man1/di …
    • good
    • 0
この回答へのお礼

返答ありがとうございます。
diffコマンドは比較だけだと思っていたのですが、実際はいろんな処理が出来るんですね。
参考になりました。

お礼日時:2004/02/15 11:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!