• 締切済み

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 どなたか良いスクリプトありましたら 教えていただけないでしょうか。 よろしくお願いします。

みんなの回答

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.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; } 質問で出ている例だと、処理できますが、それ以外の場合は動作保証外ですな。

oyoooo
質問者

お礼

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

  • mi-si
  • ベストアンサー率35% (200/567)
回答No.1

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

参考URL:
http://www.linux.or.jp/JM/html/gnumaniak/man1/diff.1.html
oyoooo
質問者

お礼

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

関連するQ&A