awk printf 宽度中的数字并将其向上舍入

awk printf 宽度中的数字并将其向上舍入

我需要打印函数一个数字,但具有给定的宽度和四舍五入(使用 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) }"

没有意识到这一点可能会导致微妙但令人讨厌的错误。

相关内容