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 (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