Arrondir avec un script shell (awk?)

Fermé
0seb0 Messages postés 37 Date d'inscription jeudi 16 août 2007 Statut Membre Dernière intervention 6 mars 2008 - 29 nov. 2007 à 16:07
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 - 3 déc. 2007 à 14:06
Bonjour les magiciens du awk !

Je galère avec les arrondis....

J'ai un fichier texte formatté comme ça :
1231, 4.00000000E+001, 3.50000021E+001,-9.37821412E-002
188, 4.00000000E-014,-3.50000021E+001, 9.37821412E-003
...
Et je voudrais simplement que le 4.00000000E-014 soit remplacé par 0.00000000E+000.

Je pense que ça doit se faire en awk mais je ne sais pas comment dire "si valeur absolue de $2 < 0.000001, alors print 0.00000000E+000 sinon print $2".

Attention : mes virgules sont toujours collées au champ de gauche. Mais elles le sont au champ de droite SI ET SEULEMENT SI ce dernier est négatif. Alors j'ai peur que ça groupe des champs ensemble. Il faudrait imposer que le séparateur de champ soit le caractère ",".

Merci de votre aide !
A voir également:

6 réponses

blux Messages postés 26465 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 14 novembre 2024 3 314
29 nov. 2007 à 16:13
Salut,

j'ai peur de comprendre mal l'astuce.

Manifestement, il s'agit de données séparées par des virgules, en format anglais (point décimal) et qui peuvent être signées.

Donc si tu souhaites remplacer 4.00000000E-014 par 0.00000000E+000, tu vas perdre une donnée (et non de la précision dans un nombre).

Ou alors j'ai pas compris...
0
0seb0 Messages postés 37 Date d'inscription jeudi 16 août 2007 Statut Membre Dernière intervention 6 mars 2008 16
29 nov. 2007 à 16:17
En fait, je veux arrondir à 0 ce qui est plus petit (en valeur abolu) que 0.0000001.

L'histoire des virgules et des signes, c'est juste un souci que je vois arriver gros comme une maison si j'utilise du awk. Mais bon, il faut dire que je ne suis pas un David Coperfield du awk aussi... :p
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
29 nov. 2007 à 16:19
4.00000000E-014 c'est 4 puissance -14 donc très très petit
0
0seb0 Messages postés 37 Date d'inscription jeudi 16 août 2007 Statut Membre Dernière intervention 6 mars 2008 16
29 nov. 2007 à 16:21
En fait, c'est même moins que ça !
C'est 4 fois 10 puissance -14. Donc 0,00000000000004.
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
29 nov. 2007 à 16:24
juste, j'avais oublié le 10 ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
0seb0 Messages postés 37 Date d'inscription jeudi 16 août 2007 Statut Membre Dernière intervention 6 mars 2008 16
3 déc. 2007 à 13:40
Maintenant que les matheux se sont exprimés, peut-être un info-man (attention à la prononciation douteuse...) aurait-il une idée ?
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 620
3 déc. 2007 à 14:06
x=$2 ; if(x < 0.0) x=x*-1.0 ; if (x < 0.0000001 ) x=0.0 ; printf("%1.E", x) ;
0