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

Résolu
michael_scott Messages postés 65 Statut Membre -  
michael_scott Messages postés 65 Statut Membre -
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

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    quel awk ?
    awk --version
    forcer un traitement numérique de $3 :
    if($3+0<0)...
    1
    1. michael_scott Messages postés 65 Statut Membre
       
      awk -v

      forcer un traitement, c'est à dire ?
      merci
      0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      quelle version ?
      $3+0 force awk à traiter $3 comme un nombre et pas comme une chaine de caractères
      0
    3. michael_scott Messages postés 65 Statut Membre
       
      je ne sais pas comment on sait la version...
      ok ok j ai compris, je vais essayer
      0
    4. michael_scott Messages postés 65 Statut Membre
       
      ça ne marche pas non plus , il considère toujours mes valeurs négatives positives...
      0
    5. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      quel système d'exploitation ?
      essayer
      awk -W version
      0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
    1. michael_scott Messages postés 65 Statut Membre
       
      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
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      la 1ère ligne, 200 pour $3 qui vaut 3 <0 ???
      0
    3. michael_scott Messages postés 65 Statut Membre
       
      C est bon, j ai compris , merci pour ton aide !
      0
    4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      explique !
      0
    5. michael_scott Messages postés 65 Statut Membre
       
      beh j ai enlevé le awk -F "/" pour passer a un awk normal.. pas trouver mieux
      0