Problème awk ( valeur supérieure ou inférieure à zero)

Résolu/Fermé
michael_scott Messages postés 58 Date d'inscription mercredi 2 avril 2014 Statut Membre Dernière intervention 8 novembre 2018 - Modifié par michael_scott le 24/09/2014 à 15:22
michael_scott Messages postés 58 Date d'inscription mercredi 2 avril 2014 Statut Membre Dernière intervention 8 novembre 2018 - 25 sept. 2014 à 09:53
Bonjour,



J'ai un shell comprenant un awk pour faire des opérations du type (je ne mets tous le shell pour plus de clarté )


if ( $3>0 ) { valeur=11000 }
if ( $3<0 ) {valeur=200}
Jusque la tout va bien, mais lorsque que $3 est très proches de zero , par ex $3=-1.415642E-07 ; au lieu de prendre valeur à 200 comme $3 est négatif, il me prend valeur=11000.

Le problème doit venir du nombre de caractère.. ou un truc du genre..

Si quelqu'un peux m'aider

Merci d'avance : )

Michael Scott

2 réponses

dubcek Messages postés 18752 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 3 octobre 2024 5 618
24 sept. 2014 à 15:36
hello
quel awk ?
awk --version
forcer un traitement numérique de $3 :
if($3+0<0)...
1
michael_scott Messages postés 58 Date d'inscription mercredi 2 avril 2014 Statut Membre Dernière intervention 8 novembre 2018
24 sept. 2014 à 15:44
awk -v

forcer un traitement, c'est à dire ?
merci
0
dubcek Messages postés 18752 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 3 octobre 2024 5 618
24 sept. 2014 à 16:15
quelle version ?
$3+0 force awk à traiter $3 comme un nombre et pas comme une chaine de caractères
0
michael_scott Messages postés 58 Date d'inscription mercredi 2 avril 2014 Statut Membre Dernière intervention 8 novembre 2018
24 sept. 2014 à 16:18
je ne sais pas comment on sait la version...
ok ok j ai compris, je vais essayer
0
michael_scott Messages postés 58 Date d'inscription mercredi 2 avril 2014 Statut Membre Dernière intervention 8 novembre 2018
24 sept. 2014 à 16:25
ça ne marche pas non plus , il considère toujours mes valeurs négatives positives...
0
dubcek Messages postés 18752 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 3 octobre 2024 5 618
24 sept. 2014 à 16:38
quel système d'exploitation ?
essayer
awk -W version
0
dubcek Messages postés 18752 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 3 octobre 2024 5 618
25 sept. 2014 à 08:10
j'ai awk 3.1.6
le test fonctionne, montre un exemple des vraies données et comment awk les lit.
$ cat a4
1 2 3 4
11 22 -1.415642E-07 44
111 222 -3 444
$ awk '{if ( $3>0 )valeur=11000; if ( $3<0 )valeur=200; print valeur}' a4
11000
200
200
0
michael_scott Messages postés 58 Date d'inscription mercredi 2 avril 2014 Statut Membre Dernière intervention 8 novembre 2018
Modifié par michael_scott le 25/09/2014 à 08:28
mon awk est de type : awk -F "/"
donc il lit mon fichier de telle sorte je pense :
1/ 2 / 3 /4
11 /22 /-1.415642E-07 /44
111/ 222/ -3 /444

et donc apres awk '{if ( $3>0 )valeur=11000; if ( $3<0 )valeur=200; print valeur}' a4 :
200
200
200
0
dubcek Messages postés 18752 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 3 octobre 2024 5 618
25 sept. 2014 à 08:57
la 1ère ligne, 200 pour $3 qui vaut 3 <0 ???
0
michael_scott Messages postés 58 Date d'inscription mercredi 2 avril 2014 Statut Membre Dernière intervention 8 novembre 2018
25 sept. 2014 à 08:57
C est bon, j ai compris , merci pour ton aide !
0
dubcek Messages postés 18752 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 3 octobre 2024 5 618
25 sept. 2014 à 08:58
explique !
0
michael_scott Messages postés 58 Date d'inscription mercredi 2 avril 2014 Statut Membre Dernière intervention 8 novembre 2018
25 sept. 2014 à 09:53
beh j ai enlevé le awk -F "/" pour passer a un awk normal.. pas trouver mieux
0