Es scheint mir ein Fehler in awk
( mawk
1.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/locale
oder mit locale
Befehl 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/locale
das für Sie korrekt aktualisiert wird .