Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/04/2011, 15h59   #1
Membre habitué
 
Homme Fabrice
Lille
Inscription : février 2011
Messages : 137
Détails du profil
Informations personnelles :
Nom : Homme Fabrice
Localisation : France

Informations professionnelles :
Activité : Lille
Secteur : Services à domicile

Informations forums :
Inscription : février 2011
Messages : 137
Points : 109
Points : 109
Par défaut chiffre après la virgule

Bonjour
Qu'elle est la commande pour limiter a deux chiffres après la virgule ?

Code :
1
2
3
4
 let "io_wbsfinal = io_wbstemp / 5"
let "io_rbsfinal = io_rbstemp / 5"
 
echo "$io_wbsfinal|'DiskWriteBPS'=$io_wbsfinal 'DiskReadBPS'=$io_rbsfinal"
j'effectue les deux opération avec let et je fais un écho du résultat mais j'aimerai avoir seulement deux chiffres après la virgule svp

Merci
fbb53 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 07/04/2011, 16h30   #2
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
Bonjour,

le shell ne gère pas les décimales, il faut en passer par bc :
Code BASH :
1
2
3
var=$(bc -l <<<"scale=2; 3 / 5")
echo "$var"
.60
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 07/04/2011, 16h36   #3
Membre habitué
 
Homme Fabrice
Lille
Inscription : février 2011
Messages : 137
Détails du profil
Informations personnelles :
Nom : Homme Fabrice
Localisation : France

Informations professionnelles :
Activité : Lille
Secteur : Services à domicile

Informations forums :
Inscription : février 2011
Messages : 137
Points : 109
Points : 109
je suis désolé mais je ne comprends pas ton programme

moi j'ai une valeur du style 27.293838473

et j'aimerais avoir genre 27.29
fbb53 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 07/04/2011, 17h01   #4
Membre éclairé
 
Avatar de FRUiT
 
Homme
Inscription : février 2011
Messages : 83
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2011
Messages : 83
Points : 326
Points : 326
Un peu tiré par les cheveux mais bon :
Code :
1
2
3
 
var="27.293838473"
printf -v var "%.2f" ${var/./,}
var aura comme valeur 27,29
__________________
Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
FRUiT est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/04/2011, 17h02   #5
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
la valeur de quelle variable ?
peu importe, le shell ne gère pas le calcul des décimales.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 07/04/2011, 17h08   #6
Membre habitué
 
Homme Fabrice
Lille
Inscription : février 2011
Messages : 137
Détails du profil
Informations personnelles :
Nom : Homme Fabrice
Localisation : France

Informations professionnelles :
Activité : Lille
Secteur : Services à domicile

Informations forums :
Inscription : février 2011
Messages : 137
Points : 109
Points : 109
la méthode de fruit ne marche pas.

Moi j'ai une valeur que je récupère avec un snmpget donc cette valeur est du style 65.3938839, ensuite je l’affiche avec un echo mais j'aimerai l'afficher sous forme de 65.39
fbb53 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/04/2011, 17h15   #7
Membre éclairé
 
Avatar de FRUiT
 
Homme
Inscription : février 2011
Messages : 83
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2011
Messages : 83
Points : 326
Points : 326
Comment ça, ça marche pas ? Tu peux être plus précis ?

Déjà il est écrit en quoi ton script ? Ce serait pas du sh ?

Voilà qui devrait marcher, même en sh :
Code :
1
2
3
4
5
> var=65.3938839
> printf -v var "%.2f" ${var%.*},${var#*.}
> echo $var
65,39
>
__________________
Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
FRUiT est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 07/04/2011, 17h20   #8
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 534
Points : 7 743
Points : 7 743
si c'est juste pour l'affichage il suffit de couper (méthode portable à tous shell unix)

Code :
1
2
3
4
5
6
7
8
 
~:$ p=26.666666
~:$ echo $var | sed "s/\(.*\...\).*/\1"
26.66
~:$ p=123.123
~:$ echo $var | sed "s/\(.*\...\).*/\1"
123.12
~:$
en clair ça fait
echo $var | substitue tout ce qui est (n caractères.au + de 2 autres) par la même chose - tout ce qui dépasse.

tu peux pousser le vice jusqu'à tester que ce soient bien des chiffres !
en remplaçant les point par
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/04/2011, 17h23   #9
Membre habitué
 
Homme Fabrice
Lille
Inscription : février 2011
Messages : 137
Détails du profil
Informations personnelles :
Nom : Homme Fabrice
Localisation : France

Informations professionnelles :
Activité : Lille
Secteur : Services à domicile

Informations forums :
Inscription : février 2011
Messages : 137
Points : 109
Points : 109
oui c'est du shell FRUiT vu que je suis dans la session shell...
fbb53 est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 07/04/2011, 17h25   #10
Membre éclairé
 
Avatar de FRUiT
 
Homme
Inscription : février 2011
Messages : 83
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2011
Messages : 83
Points : 326
Points : 326
Bah excuse moi du peu mais y'en a plusieurs des shells, et qui ont tous leur syntaxe particulière... bash, ksh, ou sh pour ne citer que les plus célèbres...

C'est le genre de précision qu'on attend d'un gars qui a un problème. Sans quoi l'aider c'est un peu peine perdue.
__________________
Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
FRUiT est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 07/04/2011, 17h28   #11
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 534
Points : 7 743
Points : 7 743
Citation:
Envoyé par fbb53 Voir le message
oui c'est du shell FRUiT vu que je suis dans la session shell...
ce que FRUiT voulait dire c'est QUEL shell (tcsh, pdksh, bash, sh etc...)


j'en profite pour ajouter la solution finale très portable : (fonctionne sur bash/ksh/sh sous *BSD, Solaris, AIX, Tru64 et HPUX) le reste je sais pas


Code :
echo $var | sed "s/\([0-9]*\.[0-9][0-9]\).*/\1/"
si il s'agit de faire des calculs avec... par contre :

Code :
1
2
 
echo "$var2 $var1 2k * pq" | dc
pour une multiplication et bien sur c'est 2k qui défini 2 decimal 3k 3 et ainsi de suite...
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 08/04/2011, 16h42   #12
Membre habitué
 
Homme Fabrice
Lille
Inscription : février 2011
Messages : 137
Détails du profil
Informations personnelles :
Nom : Homme Fabrice
Localisation : France

Informations professionnelles :
Activité : Lille
Secteur : Services à domicile

Informations forums :
Inscription : février 2011
Messages : 137
Points : 109
Points : 109
Merci de vos réponses
fbb53 est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 11/04/2011, 10h30   #13
Membre éclairé
 
Avatar de FRUiT
 
Homme
Inscription : février 2011
Messages : 83
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2011
Messages : 83
Points : 326
Points : 326
Citation:
Envoyé par FRUiT Voir le message
Voilà qui devrait marcher, même en sh :
Code :
1
2
3
4
5
> var=65.3938839
> printf -v var "%.2f" ${var%.*},${var#*.}
> echo $var
65,39
>
Juste un petit message pour d'éventuels lecteurs, je viens de me rendre compte que ceci ne marchera pas non plus en sh, car l'option -v de printf n'est présente que dans le builtin bash printf...

En revanche /usr/bin/printf, (ou le builtin sh s'il y en a un ?) semble gérer le « . » plutôt que la « , » (c'est probablement une question de locale)

En pur sh cela donnera donc :
Code :
1
2
3
4
5
> var=65.3938839
> var=$(printf "%.2f" $var)
> echo $var
65.39
>
__________________
Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
FRUiT est déconnecté   Envoyer un message privé Réponse avec citation 20
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h55.


 
 
 
 
Partenaires

Hébergement Web