Rechercher : dans
Par :

Arrondir avec un script shell (awk?)

Dernière réponse le 3 déc 2007 à 14:06:11 0seb0, le 29 nov 2007 à 16:07:59 
 Signaler ce message aux modérateurs

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 !

Configuration: Windows 2000
Internet Explorer 6.0

Meilleures réponses pour « Arrondir avec un script shell (awk?) » dans :
Exécuter un script shell VoirExécution d'un script Pour pouvoir exécuter un script ou un programme en ligne de commande il y a plusieurs possibilités : 1. Le chemin absolu 2. Le chemin relatif 3. Modifier la variable PATH Note: Le Sha...

1

blux, le 29 nov 2007 à 16:13:46

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...

A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

2

0seb0, le 29 nov 2007 à 16:17:36

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

Répondre à 0seb0

3

dubcek, le 29 nov 2007 à 16:19:56

4.00000000E-014 c'est 4 puissance -14 donc très très petit

Répondre à dubcek

4

0seb0, le 29 nov 2007 à 16:21:55

En fait, c'est même moins que ça !
C'est 4 fois 10 puissance -14. Donc 0,00000000000004.

Répondre à 0seb0

5

dubcek, le 29 nov 2007 à 16:24:56

Juste, j'avais oublié le 10 ...

Répondre à dubcek

6

0seb0, le 3 déc 2007 à 13:40:27

Maintenant que les matheux se sont exprimés, peut-être un info-man (attention à la prononciation douteuse...) aurait-il une idée ?

Répondre à 0seb0

7

 dubcek, le 3 déc 2007 à 14:06:11

X=$2 ; if(x < 0.0) x=x*-1.0 ; if (x < 0.0000001 ) x=0.0 ; printf("%1.E", x) ;

Répondre à dubcek
Collection CommentÇaMarche.net