Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/10/2019, à 10:59

Rugix

(Résolu) Calcul avec des nombres flottants

Bonjour,

Je débutant sur Bash, mon objectif est de Ping un site et d'envoyer les valeurs dans un fichier texte les valeurs s'affichent ainsi

 
2
4
5
3

Afin d'obtenir la moyenne et les valeurs extrêmes je fais cela

sum=0
nb_line=0
vmin=999999999 # Valeur supérieure à toutes celles du fichier
vmax=0         # Valeur inférieure à toutes celles du fichier
while read val
do

  ((sum+=val))
  ((nb_line++))
  [[ val -lt vmin ]] && vmin=$val
  [[ val -gt vmax ]] && vmax=$val

done < fichier

moy=$(bc <<<"scale=2;$sum/$nb_line")

echo moy=$moy vmin=$vmin vmax=$vmax

Mais les valeurs de pings s'affichent avec des points, je voudrais donc remplacer les point présents dans le ficher qui se nomme Ping_rec par des virgules.

Merci d'avance

Dernière modification par Rugix (Le 27/10/2019, à 21:32)

Hors ligne

#2 Le 27/10/2019, à 11:05

Sciensous

Re : (Résolu) Calcul avec des nombres flottants

pense à utiliser les balises
pour remplacer les points, il ya sed tr ... mais je pense qu'il faut passer par un intermédiaire:
exemple

T="moy=$moy vmin=$vmin vmax=$vmax"
echo "$T" | tr '.' ','

antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#3 Le 27/10/2019, à 11:35

Rugix

Re : (Résolu) Calcul avec des nombres flottants

Bonjour,

Merci pour votre aide, mais j'ai toujours la même erreur qui est :

Erreur de syntaxe  : opérateur arithmétique non valable  le symbole erronée est : . 5

Car dans le fichiers texte les pings sont affichés avec des points.

Hors ligne

#4 Le 27/10/2019, à 11:52

pingouinux

Re : (Résolu) Calcul avec des nombres flottants

Bonjour,
Les opérateurs -lt et -gt ne travaillent que sur des entiers.

man bash -> CONDITIONAL EXPRESSIONS a écrit :

       arg1 OP arg2
              OP  is one of -eq, -ne, -lt, -le, -gt, or -ge.  These arithmetic binary operators return true
              if arg1 is equal to, not equal to, less than, less than or equal to, greater than, or greater
              than or equal to arg2, respectively.  Arg1 and arg2 may be positive or negative integers.

Donne un exemple de fichier.

Hors ligne

#5 Le 27/10/2019, à 12:32

Rugix

Re : (Résolu) Calcul avec des nombres flottants

Bonjour,

Je vous montre tout:

Le ping je le fais comme ça:

# Faire un Ping
        
	temps=$(ping -c 1 ac-nantes.fr | grep rtt |  awk -F "/"  '{print $5}')
	Ping1=$temps
	

# Envoi des pings vers le ficher texte correspondant 
	echo $Ping1 >> Ping
	echo "Le temps du ping est de $Ping1 ms."

puis j'obtiens donc un fichier texte:

 
41.262
34.569
39.245
33.806
34.052
34.291
34.800
36.166

Et pour obtenir la valeur moyenne et les valeurs extrêmes:

 
sum=0
nb_line=0
vmin=999999
vmax=0

while read val 
do 
	
	echo $val

	((sum+=val))
	((nb_line++))
	[[ val -lt vmin ]] && vmin=$val
	[[ val -gt vmax ]] && vmax=$val


done < Ping_rec


moy=$(bc <<<"scale=2;$sum/$nb_line")

echo moy=$moy vmin=$vmin vmax=$vmax

Dernière modification par Rugix (Le 27/10/2019, à 14:28)

Hors ligne

#6 Le 27/10/2019, à 12:49

pingouinux

Re : (Résolu) Calcul avec des nombres flottants

En adaptant le script :

sum=0
nb_line=0
vmin=999999999 # Valeur supérieure à toutes celles du fichier
vmax=0         # Valeur inférieure à toutes celles du fichier
while read val
do

  sum=$(bc <<<"$sum+$val")
  ((nb_line++))
  [[ $(bc <<<"$val<$vmin") -eq 1 ]] && vmin=$val
  [[ $(bc <<<"$val>$vmax") -eq 1 ]] && vmax=$val

done < fichier

moy=$(bc -l <<<"$sum/$nb_line")

echo moy=$moy vmin=$vmin vmax=$vmax

Résultat avec tes valeurs :

moy=36.02387500000000000000 vmin=33.806 vmax=41.262

Ajouté : Avec awk

awk -v vmin=999999999 -v vmax=0 '{s+=$1;if($1<vmin)vmin=$1;if($1>vmax)vmax=$1}END{printf("moy=%s vmin=%s vmax=%s\n",s/NR,vmin,vmax)}' fichier

Dernière modification par pingouinux (Le 27/10/2019, à 12:55)

Hors ligne

#7 Le 27/10/2019, à 12:53

cqfd93

Re : (Résolu) Calcul avec des nombres flottants

Modération

Bonjour,

Pour ajouter toi-même les balises code à tes messages #1 et #5 :

  • Cliquer sur le lien « Modifier » en bas à droite du message

  • Sélectionner le texte

  • Cliquer sur le <> de l'éditeur de message
    1471986854.png


cqfd93

Hors ligne

#8 Le 27/10/2019, à 13:15

Rugix

Re : (Résolu) Calcul avec des nombres flottants

Rebonjour,

Merci pour votre aide cela marche très bien.
Désolé pour les balises je ne savais pas comment les faire.

Hors ligne

#9 Le 27/10/2019, à 13:36

cqfd93

Re : (Résolu) Calcul avec des nombres flottants

Rugix a écrit :

Désolé pour les balises je ne savais pas comment les faire.

Maintenant que tu as la marche à suivre, il reste à le faire…


cqfd93

Hors ligne

#10 Le 27/10/2019, à 16:46

Rugix

Re : (Résolu) Calcul avec des nombres flottants

Bonsoir,

Pouvez-vous m'expliquer la partie du milieu du code avec l'utilisation de bc je ne comprend pas trop.

Dernière modification par Rugix (Le 27/10/2019, à 16:56)

Hors ligne

#11 Le 27/10/2019, à 17:01

pingouinux

Re : (Résolu) Calcul avec des nombres flottants

Rugix #10 a écrit :

Pouvez-vous m'expliquer la partie du milieu du code avec l'utilisation de br je ne comprend pas trop.

Où vois-tu br ?

S'il s'agit de bc, il calcule l'expression entre " ". Si c'est une expression logique, il retourne 1 si elle est vraie.

Hors ligne

#12 Le 27/10/2019, à 17:20

Rugix

Re : (Résolu) Calcul avec des nombres flottants

Merci pour votre réponse.
Oui faute de frappe je voulais dire bc.

Bonne soirée

Hors ligne

#13 Le 27/10/2019, à 17:30

pingouinux

Re : (Résolu) Calcul avec des nombres flottants

Tu devrais donner à la discussion un titre plus explicite.

Hors ligne

#14 Le 27/10/2019, à 21:07

pingouinux

Re : (Résolu) Calcul avec des nombres flottants

Rugix Titre a écrit :

(Résolu) Remplacement des point par des virgules

J'aurais plutôt mis : [Résolu] Calcul avec des nombres flottants

Tu as aussi une solution en python :

python3 -c "with open('fichier') as f: v=list(map(float,f.read().split())); print('moy=%s vmin=%s vmax=%s\n'%(sum(v)/len(v),min(v),max(v)))"

Hors ligne