0
votes

Fonctionnement moyen en utilisant des nombres avec des décimales

Je veux obtenir la moyenne des nombres avec des décimales. J'ai écrit cela, mais ça me procure le message d'erreur suivant lorsque j'écris des nombres de décimales:

./ moyenne.sh: ligne 10: 1.2: Erreur de syntaxe: opérateur arithmétique non valide (jeton d'erreur est ".2") <. code> P>

Mon fonctionnement moyen est le suivant: P>

i=1;
sum=0;

while [[ i -lt 4 ]]
    do
            read nr
            echo "scale=2; $nr" | bc -l
            sum=$((sum+nr))
            i=$((i+1))
    done
echo "scale=2; $sum / 4" | bc -l


0 commentaires

4 Réponses :


0
votes

Vous pouvez utiliser bc code> comme vous le faites ci-dessous:

sum=$( echo $sum + $nr | bc -l )


1 commentaires

i = 1; somme = 0; tandis que [[i -lt 4]] a lu nr Sum = $ (echo $ somme + $ nr | bc -l) i = $ (((i + 1)) fait écho "échelle = 2; $ somme / 4" | BC -L Les résultats sont fausses: entrée: 1.1,2,2,3,3; Sortie: 1.65



0
votes

Votre code fonctionne bien sur mon système (Bash 4.4.20), mais vous devez modifier la ligne 1 de votre script sur i = 0 si vous souhaitez lire 4 numéros. Cela vous aiderait si vous fournissez également votre entrée avec votre script.

Cependant, un moyen plus facile d'utiliser datamash par: xxx

edit

Si vous ne pouvez pas utiliser DataMash , awk serait bon pour vous: < Pré> xxx


3 commentaires

Pour le nombre normal (1,2,3,4,5, ...) Cela fonctionne correctement, mais pour des chiffres avec des décimales (1,2, 2.3, ....) Cela ne fonctionne pas. Je ne peux pas utiliser DataMash sur mon serveur, j'ai besoin de trouver une autre solution. Merci


Il semble que Bash n'aime pas les nombres décimaux depuis $ (((11/3)) renvoie 3 .


@Dagosdragomir J'ai ajouté une solution en utilisant awk . Cela devrait fonctionner.



0
votes

comme dibery dit, vous devez modifier sur i = 0 si vous souhaitez calculer la moyenne pour 4 chiffres.

pour la lecture d'une entrée avec des décimales, xxx

pas très élégant mais pourrait fonctionner ...

pour la somme de somme, je pense que vous ne pouvez pas résumer directement comme des entiers à bash, donc peut-être essayer cela < / p> xxx

Pour imprimer la sortie, il s'agit du format que je préfère utiliser xxx


0 commentaires

0
votes

Mon serveur n'accepte pas les utilitaires "DataMash" ou "BC" et je souhaite la somme des numéros avec des décimales du clavier, pas du fichier.

J'ai essayé quelques exemples, mais sa ne fonctionne pas: xxx


0 commentaires