Comparaison de 2 réels en csh

Résolu/Fermé
bdssssss Messages postés 9 Date d'inscription mercredi 22 août 2012 Statut Membre Dernière intervention 28 août 2012 - 27 août 2012 à 18:49
bdssssss Messages postés 9 Date d'inscription mercredi 22 août 2012 Statut Membre Dernière intervention 28 août 2012 - 28 août 2012 à 08:36
Bonjour,

Je travaille en csh. J'ai une condition en si qui cherche à comparer 2 variables, définies en début de script :

set AAA= 'echo "" | awk '{res = b + (a - b) / 2 ; printf("%0.2f",res)}' a=$var1 b=$var2 '
set BBB = 'echo "" | awk '{res = a + b ; printf("%0.2f",res)}' a=$var3 b=$var4'

if ($AAA <= $BBB) then
print "OK"
else
print "PAS OK"
endif


Quand j'exécute mon script, il plante et je peux lire le message d'erreur suivant :

if: Badly formed number.

En revanche, quand je fais afficher les variables AAA et BBB à l'écran (echo $AAA $BBB), les réels s'affichent correctement.

Quelqu'un aurait-il une idée pour solutionner mon problème?

Merci beaucoup par avance...

3 réponses

Utilisateur anonyme
27 août 2012 à 19:02
salut,

après deux/trois recherches, il semble que csh ne gère pas non plus les rééls :(

solution:
piper l'équation vers bc
si le résultat est 1, c'est ok
si le résultat est 0, c'est pas bon
:)
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
28 août 2012 à 08:31
hello
et tout faire dans awk:
echo $var1 $var2 $var3 $var4 | awk '{if(($2+($1-$2)/2) <= ($3+$4)) print "OK" ; else print "PAS OK"}'
ou si il faut garder AAA et BBB
AAA='echo $var1 $var2 | awk '{ printf("%0.2f", $2+($1-$2)/2)}''
BBB='echo $var3 $var4 | awk '{ printf("%0.2f", $1+$2)}''
echo $AAA $BBB | awk '{if($1 <= $2)print "OK" ; else print "PAS OK"}' 
0
bdssssss Messages postés 9 Date d'inscription mercredi 22 août 2012 Statut Membre Dernière intervention 28 août 2012
28 août 2012 à 08:36
Salut!

Merci pour vos réponses.

Finalement, hier soir, j'ai utilisé bc, et ça marche plutôt bien :

set AAA= 'echo "" | awk '{res = b + (a - b) / 2 ; printf("%0.2f",res)}' a=$var1 b=$var2 '
set BBB = 'echo "" | awk '{res = a + b ; printf("%0.2f",res)}' a=$var3 b=$var4'
set compar = 'echo "$AAA <= $BBB" | bc'
if ($compar == 1) then
print "OK"
else
print "PAS OK"
endif

C'est peut-être pas optimisé, mais ça fait ce que je veux! Merci en tout cas... Bonne journée!
0