Floating-point-Arithmetik in UNIX-shell-Skript
Wie rechnen mit Gleitkomma-zahlen wie 1.503923 in einem shell-Skript aus? Die floating-point-zahlen sind, gezogen aus einer Datei als string. Das format der Datei ist wie folgt:
1.5493482,3.49384,33.284732,23.043852,2.2384...
3.384,3.282342,23.043852,2.23284,8.39283...
.
.
.
Hier ist etwas Vereinfachtes Beispiel-code, den ich brauche, um zu arbeiten. Alles funktioniert einwandfrei bis auf die Arithmetik. Ich ziehe eine Linie von der Datei, dann ziehen Sie mehrere Werte aus dieser Zeile. Ich denke, dass das reduzieren auf die Suche nach Bearbeitungszeit, da diese Dateien sind sehr groß.
# 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
Ausgabe, die ich erhalte:
expr: non-numeric argument
command not found
- verwenden Sie die shell-debugging/trace-Optionen (
set -vx
), um zu sehen, welche Werte verarbeitet werden, dann können Sie passen Sie Ihre string-parsing einfach abrufen die Anzahl teilen. Dies ist gerade für ein lernen exercize, richtig? Es ist viel effizienter und leichter zu verstehen, diese Art der Verarbeitung inawk
. Viel Glück. - Gleiche Frage zur Unix & Linux: Führen Gleitkomma-Arithmetik in der shell-Skript-Variablen-Definitionen
- Verwandte: vergleichen von zwei Gleitkommazahlen in ein bash-script?
- Verwandte: Wie zu tun integer & float-Berechnungen, in der bash oder in anderen Sprachen/frameworks? auf Unix.SE
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was ist das?
Dadurch wird
bc
zufügen, um die Werte von $String2 und $String8 und speichert das Ergebnis in der Variablencalc
.Glaube ich, sollten Sie verwenden :
bc
Beispiel:
(Es ist den unix-Weg: jedes Werkzeug ist spezialisiert gut zu tun, was Sie tun sollen, und Sie arbeiten alle zusammen, um große Dinge tun. nicht emulieren ein großartiges Werkzeug, mit dem anderen, machen Sie zusammen arbeiten.)
Ausgabe:
Oder mit einer Skala von
1
statt10
:Ausgabe:
Beachten Sie, dass dies nicht durchführen Rundung.
Wenn Sie nicht über die "bc" können Sie jast verwenden 'awk' :
Skala in bc ist die Genauigkeit also mit einer Skala von 4, wenn Sie Typ bc <<< 'scale=4;22.0/7" erhalten Sie 3.1428 als Antwort. Wenn Sie eine Skala von 8 Sie erhalten 3.14285714 die 8 zahlen nach dem floating-point.
So die Waage ist eine Kommazahl Faktor