awk et LC_NUMERIC

Je me suis bien tiré les cheveux avec le awk de mon Mac Intel (sous Leopard):

des opérations mathématiques simples sur des colonnes d’un fichier me donnaient

des résultats complètement aberrants.

De même je me suis aperçu que:

echo "1.23456" |awk '{print -$1}''
-1

et que

echo "1,23456" |awk '{print -$1}'
-1,23456

En cherchant pas mal sur le web j’ai trouvé que la faute venait de la variable LC_NUMERIC.

locale | grep LC_NUMERIC
LC_NUMERIC="fr_FR.UTF-8"

En changeant cette variable par export LC_NUMERIC=C les résultats étaient complètement différents:

echo "1.23456" |awk '{print -$1}'
-1.23456

et

echo "1,23456" |awk '{print -$1}'
-1

Ce qui a résolu mes problèmes d’opérations mathématiques (j’ai donc exporter LC_NUMERIC=C dans mon .profile).

PS: Cela dit en passant la réponse -1 donnée, faudrait m’expliquer …

Cette entrée a été publiée dans Informatique, Mac Os X, Shell, avec comme mot(s)-clef(s) , , . Vous pouvez la mettre en favoris avec ce permalien.

Une réponse à awk et LC_NUMERIC

  1. Laurent dit :

    Même problème, semble venir de l’update 10.5.7.
    Idem sur Ubuntu depuis le 31 Aout 2009
    Sur mac OS, Cela viens au moment du lancement du terminal qui viens mettre à jour la variable LANG.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *