L'arithmétique à virgule flottante en shell script UNIX
Comment effectuer des calculs arithmétiques avec des nombres à virgule flottante comme 1.503923 dans un script shell? Les nombres à virgule flottante sont tirés à partir d'un fichier sous forme de chaîne. Le format du fichier est la suivante:
1.5493482,3.49384,33.284732,23.043852,2.2384...
3.384,3.282342,23.043852,2.23284,8.39283...
.
.
.
Voici quelques simplifiée exemple de code que j'ai besoin pour travailler. Tout fonctionne bien jusqu'à l'arithmétique. Je tire une ligne du fichier, puis tirez plusieurs valeurs à partir de cette ligne. Je pense que ce serait de couper vers le bas sur la recherche de temps de traitement que ces fichiers sont énormes.
# set vars, loops etc.
while [ $line_no -gt 0 ]
do
line_string=`sed -n $line_no'p' $file_path` # Pull Line (str) from a file
string1=${line_string:9:6} # Pull value from the Line
string2=${line_string:16:6}
string3=...
.
.
.
calc1= `expr $string2 - $string7` |bc -l # I tried these and various
calc2= ` "$string3" * "$string2" ` |bc -l # other combinations
calc3= `expr $string2 - $string1`
calc4= "$string2 + $string8" |bc
.
.
.
generic_function_call # Use the variables in functions
line_no=`expr $line_no - 1` # Counter--
done
De sortie que je reçois:
expr: non-numeric argument
command not found
utilisation du shell de débogage/options de trace (
Même question sur la Unix & Linux: Effectuer arithmétique à virgule flottante en script shell définitions de variables
Connexes: Comment faire pour comparer deux nombres en virgule flottante dans un script bash?
Connexes: Comment faire integer & float calculs, en bash ou d'autres langages/frameworks? à Unix.SE
set -vx
) pour voir quelles sont les valeurs sont en cours de traitement, vous pouvez ajuster votre traitement de chaîne pour récupérer uniquement le nombre de pièces. C'est juste pour l'apprentissage d'un exercice, à droite? Il est beaucoup plus efficace et plus facile à comprendre ce genre de traitement dans awk
. Bonne chance.Même question sur la Unix & Linux: Effectuer arithmétique à virgule flottante en script shell définitions de variables
Connexes: Comment faire pour comparer deux nombres en virgule flottante dans un script bash?
Connexes: Comment faire integer & float calculs, en bash ou d'autres langages/frameworks? à Unix.SE
OriginalL'auteur Dave Engineer | 2013-01-08
Vous devez vous connecter pour publier un commentaire.
Quoi à ce sujet?
Cela fera
bc
pour ajouter les valeurs de $Mot2 et $String8 et enregistre le résultat dans la variablecalc
.OriginalL'auteur jgr
Je crois que vous devriez utiliser :
bc
Par exemple:
(C'est de l'unix: chaque outil se spécialise à faire bien ce qu'ils sont censés faire, et ils travaillent tous ensemble pour faire de grandes choses. ne pas émuler un excellent outil à un autre, de les faire travailler ensemble.)
De sortie:
Ou avec une échelle de
1
au lieu de10
:De sortie:
Noter que ce n'effectue pas de l'arrondissement.
L'outil est ici avant jc, en prenant les commandes à partir de stdin. L'échelle est à commande utilisée à l'intérieur de la colombie-britannique. Voir plus d'infos sur gnu' bc page ici
OriginalL'auteur Olivier Dulac
Si vous n'avez pas la "colombie-britannique", vous pouvez jast utiliser 'awk' :
OriginalL'auteur igreenfield
échelle en colombie-britannique est la precission donc, avec une échelle de 4, si vous tapez bc <<< " scale=4;22.0/7 vous obtenez 3.1428 comme une réponse. Si vous utilisez une échelle de 8 vous obtenez 3.14285714 qui est de 8 chiffres après la virgule flottante.
Si l'échelle est un precission facteur
OriginalL'auteur Adli Hajarat