幅の awk printf 数値を丸めます。

幅の awk printf 数値を丸めます。

しなければならない印刷機能数字ですが、幅と丸めが指定されています(awkを使用してください!)

%10s

私はこれを持っていて何とか接続する必要があります%dが、私がやっていることすべてのために、最終的にはあまりにも多くのパラメータを提供します(より多くの列があるため)。

答え1

次のことを試すことができます。

$ 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.

答え2

書式指定子を使用すると、%f(浮動小数点)数値が指定した方法で自動的に丸められます。たとえば、値を整数に丸めるには、次のようにします。

$ awk 'BEGIN { printf("%.0f\n", 1.49); }'
1
$ awk 'BEGIN { printf("%.0f\n", 1.5); }'
2

さらに末尾の数字が必要な場合は、精度を変更してください。

答え3

awkは以下のsprintfを使用して偏見のない丸めを実行するため、プラットフォームに応じて常に丸めたい場合は、次のようなものを使用できます。

awk "BEGIN { x+=(5/2); printf('%.0f', (x == int(x)) ? x : int(x)+1) }"

これに気づかないと、微妙ですが面倒なエラーが発生する可能性があります。

関連情報