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

Awk Shell脚本并在分隔文件中添加大值,awk,sh,delimited-text,Awk,Sh,Delimited Text,我有一个脚本,它读取一个带分隔符的文件,并为每个记录将文件中的第三个元素相加。对于大多数数据文件,除一个文件外,其他文件都可以正常工作。我有一个数据文件,数据文件中有193条记录。我希望从脚本中获得2028219.43。取而代之的是,我得到了一个指数,它似乎已经被四舍五入了。起初,我认为使用printf可以得到数字,但如果数字已经四舍五入,那么它就不会返回我所期望的结果 这是我用来读取分隔数据文件的代码。每条记录中的数据由* export clm_total=$( awk -F* '{f1+=$

我有一个脚本,它读取一个带分隔符的文件,并为每个记录将文件中的第三个元素相加。对于大多数数据文件,除一个文件外,其他文件都可以正常工作。我有一个数据文件,数据文件中有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

您使用printf(或CONVFMT)的方法是正确的,但在转换数字后调用printf。只需在awk脚本中执行即可:

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

谢谢我使用了它,它可以工作:export clm_total=$(awk-F*'{f1+=$3}END{printf(“%.2f\n”,f1)}”datafile.dat)如果这是您想要的答案,请单击它旁边的复选标记。