我正在尝试使用日志文件中的整数列表 awk
{sum+=$1} END {print sum}
问题是结果大于我的limits.h文件中指定的MAX_INT,因此打印返回 3.68147e + 09
是否有优雅的方式来打印总和的全部价值?
谢谢!
答案 0 :(得分:3)
gnu awk有-M
选项,您可以尝试使用它。它应该保持精确度。
编译gawk时应使用MPFR and MP libraries
,而不是在运行时。
这是一个例子,有或没有-M
。在64位linux(Archlinux)上使用gawk 4.1.0
进行了测试:
kent$ awk 'BEGIN{printf "%d\n","368147000099999999999999999999999999"}'
368147000099999983291776543710248960
kent$ awk -M 'BEGIN{printf "%d\n","368147000099999999999999999999999999"}'
368147000099999999999999999999999999
答案 1 :(得分:1)
awk
没有足够大的数据的整数类型,并将总和提升为浮点数。据我所知,awk
中没有数据类型,其精度足以满足您的要求。即问题不在于印刷; awk字面上没有你想要的信息。
例如,您可以尝试使用ruby
(它将整数提升为大整数而不是浮点数):
ruby -nae 'BEGIN{sum=0}; END{puts sum}; sum+=$F[0].to_i'
答案 2 :(得分:0)
您可以使用支持任意精度算术的bc
。相当于你想要实现的目标是:
cut -d' ' -f1 inputfile | paste -sd+ | bc -l
编辑:根据您的评论,如果您想阻止将输出分成多行,请将BC_LINE_LENGTH
设置为0
。说:
cut -d' ' -f1 inputfile | paste -sd+ | BC_LINE_LENGTH=0 bc -l
答案 3 :(得分:0)