我正在尝试使用awk对日志文件中的整数列表求和
{sum+=$1} END {print sum}
Run Code Online (Sandbox Code Playgroud)
问题是结果大于我的limits.h文件中指定的MAX_INT,因此打印返回3.68147e + 09
是否有一种优雅的方法来打印总和的全部价值?
谢谢!
gnu awk 有-M选项,你可以试试。它应该为您保持精度。
在MPFR and MP libraries当你编译GAWK,在运行时不应该使用。
这是一个例子,有或没有-M。gawk 4.1.0在 64 位 linux (Archlinux) 上测试:
kent$ awk 'BEGIN{printf "%d\n","368147000099999999999999999999999999"}'
368147000099999983291776543710248960
kent$ awk -M 'BEGIN{printf "%d\n","368147000099999999999999999999999999"}'
368147000099999999999999999999999999
Run Code Online (Sandbox Code Playgroud)
您可以使用bc它支持任意精度算术。您想要实现的目标相当于:
cut -d' ' -f1 inputfile | paste -sd+ | bc -l
Run Code Online (Sandbox Code Playgroud)
编辑:根据您的评论,如果您想防止将输出拆分为多行,请设置BC_LINE_LENGTH为0. 说:
cut -d' ' -f1 inputfile | paste -sd+ | BC_LINE_LENGTH=0 bc -l
Run Code Online (Sandbox Code Playgroud)