Awk: Übungen: Aktionen: Lsg100

Aus Wikibooks
Wechseln zu: Navigation, Suche

Lösung[Bearbeiten]

Al      2.70     <=
Pb      11.34    >
Cr      7.19     <=
Fe      7.87     <=
Mg      1.74     <=
Ti      4.54     <=
Bi      9.80     >

Hinweis: Vorsicht ist hier beim Einlesen der Gleitkommazahlen in Feldvariablen angebracht. Je nach Systemeinstellung gilt Dezimalpunkt oder Dezimalkomma, also beispielsweise 2.70 oder 2,70. Im awk-Skript selbst gilt die klare Festlegung, dass der Dezimalpunkt, wie in den meisten anderen Programmiersprachen, zu verwenden ist. Beim Einlesen von Datenfeldern wie in obigem Beispiel kann aber der Fall eintreten, dass $2+0 nicht 2.70, sondern 2 ergibt. Das ist natürlich höchst problematisch. Ein Datenfeld mit dem Inhalt 2,70 würde aber anderseits in 2.7 konvertiert. Während Lokalisierung in vielen anderen Fällen erwünscht ist, führt das hier zu Problemen. Im konkreten Fall bietet sich vor Ausführung des awk-Skriptes die explizite Umstellung des Sprachmodus auf C-Standard (mit Dezimalpunkt) an. Werden andererseits Dateien eingelesen, wo Dezimalkommas Verwendung finden, so ist z.B. auf de_DE umzustellen. Realisiert wird die Umstellung unter Linux durch Zuweisung des entsprechenden Wertes an die Systemvariable LANG, z.B. durch

  • LANG=C

bzw. umgekehrt

  • LANG=de_DE


← zurück