printf数値を出力する必要がありますが、指定された幅で丸められます(awkで!)
%10s
私はこれを持っていて、どういうわけか%d
を接続する必要がありますが、私が行うすべてのことは、awkにはパラメータが多すぎます(列が多いため)。
あなたはこれを試すことができます:
$ awk 'BEGIN{printf "%3.0f\n", 3.6}'
4
フォーマットオプションには2つの部分があります。
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
後続の数字が必要な場合は、精度を変更します。
Awkは下でsprintfを使用し、公平な丸めを行うため、プラットフォームによっては、常に切り上げたい場合は、次のようなものを使用する必要があります。
awk "BEGIN { x+=(5/2); printf('%.0f', (x == int(x)) ? x : int(x)+1) }"
これに気づかないと、微妙だが厄介なバグが発生する可能性があります。