• 締切済み

Linuxコマンド(gawk)の性能について

UNIXからLinuxへの移植を行っています。 通常Linuxに移植した場合、Linuxの性能上 処理時間が短縮されると聞いていますが、 UNIXのシェルで作成されているプログラムを移植しましたところ、逆に処理時間が遅延してしまいました。 シェルのどの部分で時間がかかっているか調べましたところ、「gawk」コマンドで時間がかかっている模様です。 (gawk実行時間 UNIX:21行/秒、Linux:5行/秒) (gawk -v dat=$key -v rno=$RECNO 'BEGIN{FS=",";OFS=","}{if(dat == $18){$18=rno substr($18,5);print $0} else {print $0}}' $MOTOOBJ > $KEKKAOBJ) 時間短縮を目標に作業を行っていますので、遅延するのであれば 理由を提出しなければなりません。 ご存知の方がおられましたら、ご教授願います。 よろしくお願いいたします。

みんなの回答

  • dscripty
  • ベストアンサー率51% (166/325)
回答No.2

大きな csv みたいだから、物理ディスクとかファイルシステムの違いが大きく影響すると思うよ。 とりあえず出力を >/dev/null にしてみてもう一度時間を比較してみるのはどう?

すると、全ての回答が全文表示されます。
  • entree
  • ベストアンサー率55% (405/735)
回答No.1

> 通常Linuxに移植した場合、Linuxの性能上 処理時間が短縮されると聞いていますが、 そうとは限りません。同じLinux 上でも bash(デフォルト と ashでは全然処理速度が違います。(ashの方が速い) それは当然ですよね? やっていることは同じでも実装が異なるわけですから。 awkも同じです。Unix(SolarisかHP-UXかAIXかは知りませんが)のawkの実装と gawkの実装は全く別物です。 なので、Unix上で速いコマンド、Linux上で速いコマンドがあるのは当然のことです。 gawkについて言えば、マルチバイトを無効にする(環境変数LANGをCに設定する) ことで、ご提示いただいたプログラムは4倍くらい高速になるようです。 ただし、keyにマルチバイト文字を含む場合、substrが文字単位ではなく、 バイト単位で解釈されます。 Unixのawkの中にはそもそもマルチバイトを扱えない実装もあるでしょうから、 結果としてUnixのawkの方が高速になっているだけかもしれません。

すると、全ての回答が全文表示されます。

関連するQ&A