Betrachten Sie den folgenden Befehl in einem Bash-Terminal:sprintf verhält sich anders in GNU Awk 3.1.5 und GNU Awk 3,17
echo 0.00027849383762390271 | awk '{print sprintf("%.20f",$1)}'
Ich bin auf zwei Maschinen verbunden sind.
Die erste hat GNU Bash Version 4.15 und GNU Awk Version 3.1.7. Der obige Befehl gibt zurück, was erwartet wird: 0,00027849383762390268 (obwohl sich die letzten zwei Ziffern von meiner ursprünglichen Nummer unterscheiden)
Die zweite Maschine hat GNU Bash Version 3.2.39 und GNU Awk Version 3.1.5. Der obige Befehl gibt zurück: 0,00000000000000000000 (20 Nullen nach dem Komma). Beachten Sie das ',' anstelle von '.' .
Warum verhält sich die zweite Maschine anders als die erste und wie verhält sie sich wie die erste Maschine?
Ich ssh zu beiden Maschinen vom selben lokalen Computer. Warum verhalten sie sich anders? Gibt es eine Variable, die in den Maschinen anders eingestellt ist? By the way, die LC_ALL, wie Sie vorgeschlagen, funktioniert. Hier ist der gesamte Befehl: 'echo 0.00027849383762390271 | LC_ALL = C awk '{print sprintf ("%. 20f", $ 1)}' ' – dada
Ja, es gibt eine Variable oder eine Konfigurationsdatei, aber idk wo/was. Google 'locale', um mit dem Debuggen zu beginnen. Führen Sie 'env' auf beiden Rechnern aus und suchen Sie nach Unterschieden, etc ... –