Antworten:
Sie können dies versuchen:
$ awk 'BEGIN{printf "%3.0f\n", 3.6}'
4
Unsere Formatoption besteht aus zwei Teilen:
3
: Bedeutet, dass die Ausgabe auf 3 Zeichen aufgefüllt wird..0f
: Bedeutet, dass die Ausgabe keine Genauigkeit hat, dh aufgerundet.Ab man awk
können Sie weitere Details sehen:
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.
Wenn Sie den %f
Formatbezeichner verwenden, wird Ihre (Gleitkomma-) Zahl bei der Angabe automatisch gerundet. Verwenden Sie beispielsweise, um einen Wert auf ganze Zahlen zu runden
$ awk 'BEGIN { printf("%.0f\n", 1.49); }'
1
$ awk 'BEGIN { printf("%.0f\n", 1.5); }'
2
Wenn Sie weitere nachgestellte Ziffern wünschen, ändern Sie einfach die Genauigkeit.
BEGIN
Block befinden, ist dies nicht der Fall. Ich testete zuerst mit dem Ausdruck im normalen Körper, also mea culpa. Danke, @Gnouc.
Awk verwendet Sprintf darunter und rundet unvoreingenommen. Abhängig von Ihrer Plattform müssen Sie also möglicherweise Folgendes verwenden, wenn Sie IMMER eine Abrundung wünschen:
awk "BEGIN { x+=(5/2); printf('%.0f', (x == int(x)) ? x : int(x)+1) }"
Wird dies nicht bemerkt, kann dies zu subtilen, aber unangenehmen Fehlern führen.
/dev/null
notwendig?