[Shell Unix] division, arrondi
renaud
-
lami20j Messages postés 21506 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21506 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
Bonjour,
Je fais un script shell et dedans j'utilise une division res=$(expr $a / $b). Après recherche il semble qu'en fait cela correspond à la division entiere..
Or il se trouve que res varie entre 0 et 6. Je perds énormément en précision : si $a/$b = 1.9, j'ai comme résultat 1...
Comment peut on traiter les flottants avec un shell? Dans mon cas précis un arrondi à l'entier le plus proche me conviendrais, meme si ce n'est pas parfait ( 0.5 retourne 1, 0.7 retourne 1, 0.3 retourne 0...)
Y a t il une solution simple pour arriver à cela?
Merci
Je fais un script shell et dedans j'utilise une division res=$(expr $a / $b). Après recherche il semble qu'en fait cela correspond à la division entiere..
Or il se trouve que res varie entre 0 et 6. Je perds énormément en précision : si $a/$b = 1.9, j'ai comme résultat 1...
Comment peut on traiter les flottants avec un shell? Dans mon cas précis un arrondi à l'entier le plus proche me conviendrais, meme si ce n'est pas parfait ( 0.5 retourne 1, 0.7 retourne 1, 0.3 retourne 0...)
Y a t il une solution simple pour arriver à cela?
Merci
4 réponses
-
Salut,
echo "scale=2; 5.7/3" | bc
man bc
man dc
lami20j -
Salut,
Tu peux poster un exemple concret s'il te plaît de ce que tu obtiens et de ce que tu aimerais obtenir.
-
Merci d'avoir regardé si rapidement,
Ce que je veux faire :
écrire un nombre au format scientifique dans un fichier .txt
je fais :
M=$((5/2));
printf "%E" $M >> in
avec ca j'obtient : 2.000000E+00
je veux obetinr 2.500000E+00
En plus je suis oblié de diviser des entiers alors que je voudrais diviser des réels.
J'ai donc essaié avec cette commande :
echo "scale=2; 5.7/3" | bc >> in
J'obtiens bien 1.90 mais je n'arrive pas à écrire ce nombre au format scientifique.
Voilà, je ne sais toujours pas si je suis clair mais n'hésite pas à me demander d'autres précisions si besoin.
Merci d'avance
Reg- Merci beaucoup pour ta réponse,
Ca marche bien
Mais j'ai un autre petit soucis maintenant :
j'ai besoin de rechercher une valeur max dans un fichier txt rempli de valeurs dans une colonne donnée et une plage de ligne donnée.
J'arrive à extraire certaines lignes du fichier dans un fichier temporaire grace aux commande head et tail mais je n'arrive pas à extraire une colonne.
Auriez vous une idée ?
-
-
Salut,
le fichier (les champs sont séparés par espace)lami20j@debian:~/trash$ cat fic 0 8452 2844 180.88 22.81 0.09 1 8452 3137 180.62 2.28 0.14 2 8452 3430 149.66 -1.84 0.30 3 8452 3724 180.62 -28.81 0.15 4 8760 2942 118.56 -18.09 0.12 5 8760 3235 173.00 28.62 0.12 6 8760 3528 149.59 -1.97 0.17 7 8760 3821 149.75 -1.88 0.44 8 9067 3039 157.84 2.12 0.18 9 9067 3333 134.97 -5.31 0.17 10 9067 3626 149.50 -1.75 0.48 11 9375 2844 137.22 -0.03 0.13 12 9375 3137 179.19 9.19 0.14 13 9375 3430 149.38 -1.91 0.47 14 9375 3723 153.91 -19.97 0.10 15 9682 2942 125.97 26.34 0.17
prenons le cas de la colonne 5 (en gras),
je veux par exemple afficher le max pour la colonne 5 seulement entre les lignes numérotés 3 à 10lami20j@debian:~/trash$ cat fic 0 8452 2844 180.88 22.81 0.09 1 8452 3137 180.62 2.28 0.14 2 8452 3430 149.66 -1.84 0.30 3 8452 3724 180.62 -28.81 0.15 4 8760 2942 118.56 -18.09 0.12 5 8760 3235 173.00 28.62 0.12 6 8760 3528 149.59 -1.97 0.17 7 8760 3821 149.75 -1.88 0.44 8 9067 3039 157.84 2.12 0.18 9 9067 3333 134.97 -5.31 0.17 10 9067 3626 149.50 -1.75 0.48 11 9375 2844 137.22 -0.03 0.13 12 9375 3137 179.19 9.19 0.14 13 9375 3430 149.38 -1.91 0.47 14 9375 3723 153.91 -19.97 0.10 15 9682 2942 125.97 26.34 0.17 lami20j@debian:~/trash$ sed '4,11!d' fic|cut -d" " -f5|sort -n -28.81 -18.09 -5.31 -1.75 -1.88 -1.97 2.12 28.62 lami20j@debian:~/trash$ sed '4,11!d' fic|cut -d" " -f5|sort -n|tail -1 28.62 lami20j@debian:~/trash$
-
Salut à tous,
j'ai un problème similaire à celui de Renaud.
Dans mon script Shell, j'aimerais diviser deux réels ou entiers et obtenir un réel.
echo "scale=2; 5.7/3" | bc
Cette commande fonctionne mais j'ai besoin d'écrire la résultat dans un fichier .txt
J'utilise normalement :
printf "%E" $variable >> fichier.txt
Mais j'obtiens des valeures entières.
Comment faire ???
Merci d'avance
Reg