2009-07-06 13 views
66

Ich habe Variablen und ich möchte den Wert von einem durch den anderen geteilt finden. Welche Befehle sollte ich verwenden, um dies zu tun?Wie teile ich in der Linux-Konsole?

+1

Ist das wirklich Programmierung verwandt? [http://stackoverflow.com/faq] –

+3

Überprüfen Sie diesen Artikel: [http://www.basicallytech.com/blog/index.php?/archives/23-command-line-caluculations-using-bc.html] (http://www.basicallytech.com/blog/index.php?/archives/23-command-line-caluclations-using-bc.html) – freitass

+1

@ frank-v Bash kann für die Programmierung verwendet werden ... auch, diese Verbindung zur FAQ funktioniert nicht – chomp

Antwort

5

Ich nehme an, dass von Linux Konsole Sie meinen, Bash.

Wenn X und Y Ihre Variablen sind, gibt $(($X/$Y)) zurück, wonach Sie fragen.

+1

Sie brauchen nicht die $ für die Variablen – Draemon

62

In der Bash-Shell, umgeben arithmetische Ausdrücke mit $((...))

$ echo $((7/3)) 
2 

Obwohl ich glaube, Sie auf ganze Zahlen beschränkt sind.

+10

Ja, Bash ist auf Integer-Mathematik beschränkt. – mkb

2

Beispiel für Integer-Division bash unter Verwendung von $ a um $ b zu teilen:

echo $((a/b)) 
8

In bash, wenn Sie in Ihrer Abteilung benötigen Dezimalzahlen nicht, können Sie tun:

>echo $((5+6)) 
11 
>echo $((10/2)) 
5 
>echo $((10/3)) 
3 
11

Ich bevorzuge immer noch dc, die ein RPN-Rechner ist, so schnelle Sitzung zu teilen 67 von 18 mit 4 Stellen Genauigkeit würde aussehen wie

>dc 
4k 
67 
18/p 
3.7222 
q 
> 
Offensichtlich

, viel mehr verfügbar ist: Mann dc

+4

Ein paar Hinweise, um vielleicht eine Reise nach "man" zu retten: RPN = Reverse Polish Notation; Kurz gesagt: Sie geben zuerst die Operanden und dann den Operator ein. Ein abschließendes 'p' wird benötigt, um das Ergebnis auszugeben. Die nicht interaktive Version der obigen Berechnung lautet: "dc -e" 4k 67 18/p''. Vorbehalt: Die Einstellung der Genauigkeit (mit '{numPlaces} k') erfolgt standardmäßig nicht auf 0, d. H. Auf eine ganzzahlige Division. – mklement0

16

bessere Weg ist "bc", ein beliebiger Genauigkeit Rechner zu verwenden.

variable=$(echo "OPTIONS; OPERATIONS" | bc) 

ex:

my_var=$(echo "scale=5; $temp_var/100 + $temp_var2" | bc) 

wo "scale = 5" ist die Genauigkeit.

man bc 

kommt mit mehreren Anwendungsbeispielen.

+1

Kühl; eine Sache zu beachten: nicht 'scale' Voreinstellungen auf ganzzahlige Division setzen - es sei denn, Sie geben' -l', wie @raytrace Notizen unten, die scheinbar gibt Ihnen 20 Dezimalstellen standardmäßig, lädt aber auch eine Bibliothek mit zusätzlichen Funktionen. – mklement0

36
echo 5/2 | bc -l 

2,50000000000000000000

diese '-l' Option im 'bc' erlaubt Ergebnisse

+3

Kühl; mit '-l' erhalten Sie standardmäßig 20 Nachkommastellen * und * eine Mathematikbibliothek wird geladen, die zusätzliche Funktionen wie Sinus definiert; Um die Anzahl der Dezimalstellen explizit anzugeben, fügen Sie den Ausdruck mit "scale = {numPlaces};" (auch) voran, wie in der Antwort von @ user1504475 gezeigt. Mit anderen Worten: "-l" ist eine bequeme Alternative zur Angabe von "scale = 20;", kommt aber aufgrund des Ladens der Bibliothek zu Leistungseinbußen - der tatsächliche Einfluss scheint jedoch vernachlässigbar zu sein. – mklement0

2

Etwas anderes floating Sie Antwort mit Raytracing das tun konnte. Sie könnten das stdout eines anderen Shell-Calls mit Backticks verwenden, um dann einige Berechnungen durchzuführen. Zum Beispiel wollte ich die Dateigröße der obersten 100 Zeilen aus ein paar Dateien wissen. Die Originalgröße von wc -c ist in Bytes, ich möchte Kilobyte wissen. Hier ist, was ich getan habe:

echo `cat * | head -n 100 | wc -c`/1024 | bc -l 
11

Sie awk verwenden können, das ist ein Dienstprogramm/Sprache für Datenextraktion entwickelt

z.B. für 1,2/3.4

>echo 1.2 3.4 | awk '{ print $2/$1 }' 
0.352941 
1

Sie sollten zu verwenden versuchen:

echo "scale=4;$variablename/3"|bc 
1

Sie auch perl -e

perl -e 'print 67/8' 
-1

Ich hatte auch das gleiche Problem verwenden können. Es ist einfach, ganze Zahlen zu teilen, aber Dezimalzahlen sind nicht so einfach. Wenn Sie 2 Zahlen wie 3,14 und 2,35 haben und teilen Sie die Zahlen dann der Code wird Division = echo 3.14/2.35 | bc echo "$ Division" die Zitate sind unterschiedlich. Seien Sie nicht verwirrt, es befindet sich direkt unter der esc-Taste auf Ihrer Tastatur. DER EINZIGE UNTERSCHIED IST DIE | bc und auch hier funktioniert echo als operator für die arithmetischen Berechnungen anstatt zu drucken. Also, ich hatte Echo "$ Division" hinzugefügt, um den Wert zu drucken. Lass es mich wissen, wenn es für dich funktioniert. Vielen Dank.

+0

Die Anführungszeichen werden hier nicht angezeigt. Setzen Sie einfach die Anführungszeichen ('') nach = und nach bc. – SHIBLI

+0

Das sind keine Zitate. Sie sind akute Akzente. Sie werden nicht angezeigt, da StackOverflow sie verwendet, um Code-Snippets hervorzuheben. "Einige Codes hier" wurden nur in die akuten Akzente eingefügt. –