awkでprint文を使って桁数の多い小数を出力すると、デフォルトでは次のように指数表現になってしまいます。
$ echo 1234567.89 | awk '{ print $1*10 }'
1.23457e+07
一度変数に代入してから出力する場合でも同様です。
$ echo 1234567.89 | awk '{ res=$1*10; print res }'
1.23457e+07
awkのprint文は、数値を出力する際の文字列への変換にsprintf関数を利用します。その際にどの形式を使って出力するのかはOFMTという組込変数で定義されていて、これがデフォルトでは"%.6g"となっています。すなわち、小数点以下第6位以上は指数表現の文字列にするということです。
したがって、以下のようにOFMTを"%0.6f"などに変更すれば不動小数点表現になります。OFMTに設定できる値は、sprintfに使う書式制御文字と同様です。
$ echo 1234567.89 | awk '{ OFMT="%.6f" } { res=$1*10; print res }'
12345678.900000
$ echo 1234567.89 | awk '{ res=$1*10; OFMT="%.6f"; print res }'
12345678.900000
ただし、$1のようなフィールド変数に直接値を代入した場合には、この変更が適用されないので注意が必要です。
$ echo 1234567.89 | awk '{ OFMT="%.6f" } { res=$1*10; $1=res; print }'
1.23457e+07