Respostas:
Você pode tentar isso:
$ awk 'BEGIN{printf "%3.0f\n", 3.6}'
4
Nossa opção de formato tem duas partes:
3
: significa que a saída será preenchida com 3 caracteres..0f
: o significado da saída não terá precisão, o que significa arredondado para cima.De man awk
, você pode ver mais detalhes:
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.
Usando o %f
especificador de formato, seu número (ponto flutuante) será arredondado automaticamente conforme você especificar. Por exemplo, para arredondar um valor para números inteiros, use
$ awk 'BEGIN { printf("%.0f\n", 1.49); }'
1
$ awk 'BEGIN { printf("%.0f\n", 1.5); }'
2
Se você quiser mais dígitos à direita, basta alterar a precisão.
BEGIN
bloco, não está. Eu testei com a expressão no corpo normal primeiro, portanto mea culpa. Obrigado, @Gnouc.
O Awk usa o sprintf por baixo e faz arredondamentos imparciais, portanto, dependendo da sua plataforma, se você deseja sempre arredondar, talvez seja necessário usar algo como isto:
awk "BEGIN { x+=(5/2); printf('%.0f', (x == int(x)) ? x : int(x)+1) }"
Não perceber isso pode levar a erros sutis, mas desagradáveis.
/dev/null
necessário?