- 締切済み
awkで二つのファイルを比較し出力する方法
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 どなたか良いスクリプトありましたら 教えていただけないでしょうか。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- osamuy
- ベストアンサー率42% (1231/2878)
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; } 質問で出ている例だと、処理できますが、それ以外の場合は動作保証外ですな。
- mi-si
- ベストアンサー率35% (200/567)
そういうときはdiffコマンドを使うと便利です。
お礼
返答ありがとうございます。 diffコマンドは比較だけだと思っていたのですが、実際はいろんな処理が出来るんですね。 参考になりました。
お礼
スクリプトありがとうございます。 試してみると、確かに出力結果が正しく出てくれました。 あとは、fileAの行が入れ替わっていても、差込が出来るように拡張してみたいと思います。 ただ、perlはawk以上に初心者なので、これを機会に勉強してみようと思います。 ありがとうございました。