Risposte:
Puoi provare questo:
$ awk 'BEGIN{printf "%3.0f\n", 3.6}'
4
La nostra opzione di formato ha due parti:
3
: significa che l'output verrà riempito con 3 caratteri..0f
: significa che l'output non avrà precisione, significato arrotondato per eccesso.Da man awk
, puoi vedere maggiori dettagli:
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.
Utilizzando l'identificatore di %f
formato, il numero (in virgola mobile) verrà arrotondato automaticamente come specificato. Ad esempio, per arrotondare un valore a numeri interi utilizzare
$ awk 'BEGIN { printf("%.0f\n", 1.49); }'
1
$ awk 'BEGIN { printf("%.0f\n", 1.5); }'
2
Se vuoi ulteriori cifre finali, basta cambiare la precisione.
BEGIN
blocco, non lo è. Ho provato prima con l'espressione nel corpo normale, quindi mea culpa. Grazie, @Gnouc.
Awk usa sprintf sotto e fa arrotondamenti imparziali, quindi a seconda della tua piattaforma se vuoi SEMPRE arrotondare potresti aver bisogno di usare qualcosa del genere:
awk "BEGIN { x+=(5/2); printf('%.0f', (x == int(x)) ? x : int(x)+1) }"
Non accorgersene può portare a bug sottili ma cattivi.
/dev/null
necessario?