Shell脚本并在分隔文件中添加大值

时间:2013-10-15 16:30:35

标签: awk sh delimited-text

我有一个脚本可以读取分隔文件,并为每个记录添加文件中的第3个元素。对于大多数数据文件,除了一个之外,这个工作正常。我有一个数据文件,数据文件中有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

1 个答案:

答案 0 :(得分:2)

你使用printf(或CONVFMT)是正确的轨道,但你在转换数字后调用printf。只需在您的awk脚本中执行此操作:

$ awk 'BEGIN{ print 2028219.43 }'           
2.02822e+06
$ awk 'BEGIN{ printf "%.2f\n", 2028219.43 }'
2028219.43