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