Мне нужно распечатать число, но с заданной шириной и округлено (с awk!)
%10s
У меня есть это и как-то мне нужно подключить, %d
но все, что я делаю, заканчивается слишком много параметров для awk (потому что у меня есть больше столбцов).
Вы можете попробовать это:
$ 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.
Используя %f
спецификатор формата, ваше число (с плавающей запятой) будет автоматически округляться по вашему усмотрению. Например, чтобы округлить значение до целых чисел, используйте
$ awk 'BEGIN { printf("%.0f\n", 1.49); }'
1
$ awk 'BEGIN { printf("%.0f\n", 1.5); }'
2
Если вам нужны дополнительные конечные цифры, просто измените точность.
/dev/null
необходимо?BEGIN
блоке, это не так. Сначала я проверил с выражением в нормальном теле, таким образом, моя вина. Спасибо, @Gnouc.Awk использует sprintf внизу и выполняет беспристрастное округление, поэтому в зависимости от вашей платформы, если вы хотите, чтобы она всегда округлялась, вам может понадобиться что-то вроде этого:
awk "BEGIN { x+=(5/2); printf('%.0f', (x == int(x)) ? x : int(x)+1) }"
Неосознание этого может привести к тонким, но неприятным ошибкам.
источник