0

区切りファイルを読み取り、レコードごとにファイル内の 3 番目の要素を追加するスクリプトがあります。ほとんどのデータ ファイルでは、これは 1 つを除いて正常に機能します。データ ファイルに 193 のレコードがある場合、1 つのデータ ファイルがあります。スクリプトから 2028219.43 が返されることを期待しています。代わりに、切り上げられたように見える指数が返されます。最初は、 printf を使用して数値を取得できると考えていましたが、数値が既に丸められている場合、期待どおりの結果が得られません。

これは、区切られたデータファイルを読み取るために使用しているコードです。各レコードのデータは、*. で区切られています。

export clm_total=$( awk -F* '{f1+=$3} END {print f1}' datafile.dat)
export new_clm_total=$(printf "%.2f" $clm_total)

スクリプトを実行すると、ログに次のように表示されます。

+ export clm_total=2.02822e+06
+ printf %.2f 2.02822e+06
+ export new_clm_total=2028220.00
+ echo 2028220.00

これはデータファイルのサンプルです。他にもレコードがあります。193 レコードすべてを表示する必要があるとは思いませんでした。

CLM*123456789*4820.9***13:A:1**A*Y*Y
CLM*123698547*3642.05***13:A:7**A*Y*Y
CLM*147852369*579.25***13:A:1**A*Y*Y
CLM*789654123*929.8***13:A:1**A*Y*Y

私が期待しているのは 2028219.43 です

私が得ているのは 2.02822e+06 です

これは 2028220.00 としてフォーマットされます

4

1 に答える 1

2

あなたはprintf(またはCONVFMT)で正しい軌道に乗っていますが、数値が変換された後にprintfを呼び出しています。awkスクリプトでそれを行うだけです:

$ awk 'BEGIN{ print 2028219.43 }'           
2.02822e+06
$ awk 'BEGIN{ printf "%.2f\n", 2028219.43 }'
2028219.43
于 2013-10-15T16:47:12.783 に答える