我需要打印函数一个数字,但具有给定的宽度和四舍五入(使用 awk!)
%10s
我有这个,不知怎的,我需要连接,%d
但我所做的一切,最终都会为 awk 带来太多参数(因为我有更多列)。
答案1
你可以试试这个:
$ awk 'BEGIN{printf "%3.0f\n", 3.6}'
4
我们的格式选项有两部分:
3
:表示输出将被填充到 3 个字符。.0f
:表示输出没有精度,表示四舍五入。
从 中man awk
,您可以看到更多详细信息:
width The field should be padded to this width. The field is normally padded
with spaces. If the 0 flag has been used, it is padded with zeroes.
.prec A number that specifies the precision to use when printing. For the %e,
%E, %f and %F, formats, this specifies the number of digits you want
printed to the right of the decimal point. For the %g, and %G formats,
it specifies the maximum number of significant digits. For the %d, %o,
%i, %u, %x, and %X formats, it specifies the minimum number of digits to
print. For %s, it specifies the maximum number of characters from the
string that should be printed.
答案2
使用%f
格式说明符,您的(浮点)数字将按照您指定的方式自动舍入。例如,要将值舍入为整数,请使用
$ awk 'BEGIN { printf("%.0f\n", 1.49); }'
1
$ awk 'BEGIN { printf("%.0f\n", 1.5); }'
2
如果您想要更多的尾随数字,只需更改精度即可。
答案3
awk 在下面使用 sprintf 并且它执行无偏舍入,因此根据您的平台,如果您希望它始终向上舍入,您可能需要使用如下内容:
awk "BEGIN { x+=(5/2); printf('%.0f', (x == int(x)) ? x : int(x)+1) }"
没有意识到这一点可能会导致微妙但令人讨厌的错误。