Awk (mawk) は小数をゼロに切り捨てます

Awk (mawk) は小数をゼロに切り捨てます

awkこれは、Ubuntu 20.04 の( 1.3.4.20200120-2)のバグのように思えますmawk。 を使用して必要な小数点以下の桁数を表示できますがprintf (%.*n*f)、次の例に示すように、暗黙の「切り捨て」が含まれているかのように、小数点以下の桁は常にゼロに丸められます。

  • 例1:

    $ echo "2.3 4.99789" | awk '{printf "%.2f %.2f\n", $1, $2}'
    2,00 4,00
    
  • 例2:

    $ cat testf
    1.23
    3.65
    5.76
    
    $awk '{ SUM += $1} END { printf "%.2f\n",  SUM }' testf
    9,00
    

答え1

これは の問題ではありませんでしたawk(ただし、awkを使用する場合の bash などではなく、で発生しましたbc)。これは単純なロケールの設定ミスでした。

東ヨーロッパのロケールでは、,の代わりに を小数点記号として使用します.。私のロケールは、米国の設定と SK の設定が混在していました。

解決:

チェック:cat /etc/default/localeまたはlocaleコマンドを使用しますLC_NUMERIC

例えば:LC_NUMERIC="sk_SK.UTF-8"

修正する:

  • ローカルで.bashrc

  • またはシステム全体で次のようにします:

    sudo update-locale LC_NUMERIC="en_US.UTF-8
    

    正しく更新され/etc/default/localeます。

関連情報