Awk (mawk) reduziert Dezimalzahlen auf Null

Awk (mawk) reduziert Dezimalzahlen auf Null

Es scheint mir ein Fehler in awk( mawk1.3.4.20200120-2) unter Ubuntu 20.04 zu sein. Ich kann die erforderliche Anzahl von Dezimalstellen mit anzeigen printf (%.*n*f), aber die Dezimalstellen werden immer auf Null gerundet, als ob ein impliziter „Floor“ beteiligt wäre:, wie Sie in den folgenden Beispielen sehen können.

  • Beispiel 1:

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

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

Antwort1

Dies war kein Problem mit awk(obwohl es in auftrat awk, nicht z. B. in Bash bei Verwendung von bc). Es war einfach eine falsche Konfiguration/Einstellung des Gebietsschemas.

Das osteuropäische Gebietsschema verwendet ,als Dezimaltrennzeichen anstelle von .. Mein Gebietsschema war eine Mischung aus US- und SK-Einstellungen.

Lösung:

Prüfen Sie: cat /etc/default/localeoder mit localeBefehl für LC_NUMERIC.

Z.B:LC_NUMERIC="sk_SK.UTF-8"

Ändern:

  • entweder vor Ort in .bashrc.

  • oder systemweit mit:

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

    /etc/default/localedas für Sie korrekt aktualisiert wird .

verwandte Informationen