Awk (mawk) уменьшает десятичные числа до нуля

Awk (mawk) уменьшает десятичные числа до нуля

Мне кажется, это ошибка в awk( mawk1.3.4.20200120-2) в Ubuntu 20.04. Я могу отобразить необходимое количество десятичных знаков с помощью 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). Это была простая ошибка конфигурации/настройки локали.

Восточноевропейская локаль использует ,в качестве десятичного разделителя вместо .. Моя локаль представляла собой смесь настроек США и настроек Словакии.

Решение:

Проверьте: 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для вас.

Связанный контент