Ich muss Variablen und ich möchte den Wert von einem geteilt durch den anderen finden. Welche Befehle soll ich dazu verwenden?
Ich muss Variablen und ich möchte den Wert von einem geteilt durch den anderen finden. Welche Befehle soll ich dazu verwenden?
Antworten:
echo 5/2 | bc -l
2.50000000000000000000
Diese Option '-l' in 'bc' ermöglicht schwebende Ergebnisse
-l
Sie standardmäßig 20 Dezimalstellen und es wird eine Mathematikbibliothek geladen, die zusätzliche Funktionen wie Sinus definiert. Um die Anzahl der Dezimalstellen explizit anzugeben, stellen Sie dem Ausdruck scale={numPlaces};
(auch) voran, wie in der Antwort von @ user1504475 gezeigt. Mit anderen Worten: Dies -l
ist eine bequeme Alternative zur Angabe scale=20;
, verursacht jedoch Leistungskosten aufgrund des Ladens der Bibliothek. Die tatsächlichen Auswirkungen scheinen jedoch vernachlässigbar zu sein.
Besser ist es, "bc" zu verwenden, einen beliebigen Präzisionsrechner.
variable=$(echo "OPTIONS; OPERATIONS" | bc)
Ex:
my_var=$(echo "scale=5; $temp_var/100 + $temp_var2" | bc)
wobei "scale = 5" die Genauigkeit ist.
man bc
kommt mit mehreren Anwendungsbeispielen.
scale
Sie die -l
Standardeinstellungen nicht auf Ganzzahldivision - es sei denn, Sie geben an , wie @raytrace unten feststellt, dass Sie anscheinend standardmäßig 20 Dezimalstellen erhalten, aber auch eine Bibliothek mit zusätzlichen Funktionen laden.
Ich bevorzuge immer noch die Verwendung von DC , einem RPN-Rechner. Eine schnelle Sitzung zum Teilen von 67 durch 18 mit 4-stelliger Genauigkeit würde also aussehen
>dc
4k
67
18/p
3.7222
q
>
Offensichtlich viel mehr verfügbar: man dc
man
: RPN = Reverse Polish Notation; Kurz gesagt: Sie geben zuerst die Operanden und dann den Operator ein. Eine Beendigung p
ist erforderlich, um das Ergebnis auszugeben. Die nicht interaktive Version der obigen Berechnung lautet : dc -e '4k 67 18 / p'
. Vorsichtsmaßnahme: Die Genauigkeit (mit {numPlaces}k
) wird nicht auf 0 gesetzt, dh auf eine ganzzahlige Division.
Sie können awk verwenden , ein Dienstprogramm / eine Sprache für die Datenextraktion
zB für 1.2 / 3.4
>echo 1.2 3.4 | awk '{ print $2/$1 }'
0.352941
In Bash können Sie Folgendes tun, wenn Sie in Ihrer Abteilung keine Dezimalstellen benötigen:
>echo $((5+6))
11
>echo $((10/2))
5
>echo $((10/3))
3
Ich gehe davon aus, dass Sie mit Linux-Konsole Bash meinen .
Wenn X
und Y
sind Ihre Variablen, gibt $(($X / $Y))
zurück, wonach Sie fragen.
Etwas anderes könnten Sie mit der Antwort von raytrace tun. Sie können die Standardausgabe eines anderen Shell-Aufrufs mithilfe von Backticks verwenden, um dann einige Berechnungen durchzuführen. Zum Beispiel wollte ich die Dateigröße der Top 100 Zeilen aus einigen Dateien wissen. Die ursprüngliche Größe von wc -c
ist in Bytes, ich möchte Kilobyte wissen. Folgendes habe ich getan:
echo `cat * | head -n 100 | wc -c` / 1024 | bc -l
Sie sollten versuchen zu verwenden:
echo "scale=4;$variablename/3"|bc
Ich hatte auch das gleiche Problem. Es ist einfach, Ganzzahlen zu teilen, aber Dezimalzahlen sind nicht so einfach. Wenn Sie 2 Zahlen wie 3.14 und 2.35 haben und die Zahlen dann teilen, lautet der Code Division = echo 3.14 / 2.35 | bc
echo "$ Division". Die Anführungszeichen sind unterschiedlich. Seien Sie nicht verwirrt, es befindet sich direkt unter der Esc-Taste auf Ihrer Tastatur. DER EINZIGE UNTERSCHIED IST DER | bc und auch hier arbeitet echo als Operator für die arithmetischen Berechnungen anstelle des Druckens. Also hatte ich das Echo "$ Division" hinzugefügt, um den Wert zu drucken. Lassen Sie mich wissen, ob es für Sie funktioniert. Vielen Dank.
some code here
die gerade in die akuten Akzente eingeschlossen wurden.