0

我有一个脚本,它读取一个分隔文件并为每条记录添加文件中的第三个元素。对于大多数数据文件,这工作正常,除了一个。我有一个数据文件,数据文件中有 193 条记录。我期待从脚本中得到 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 回答