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?
Antwort
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.
Sie brauchen nicht die $ für die Variablen – Draemon
In der Bash-Shell, umgeben arithmetische Ausdrücke mit $((...))
$ echo $((7/3))
2
Obwohl ich glaube, Sie auf ganze Zahlen beschränkt sind.
Ja, Bash ist auf Integer-Mathematik beschränkt. – mkb
Beispiel für Integer-Division bash unter Verwendung von $ a um $ b zu teilen:
echo $((a/b))
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
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
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
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.
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
echo 5/2 | bc -l
2,50000000000000000000
diese '-l' Option im 'bc' erlaubt Ergebnisse
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
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
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
Sie sollten zu verwenden versuchen:
echo "scale=4;$variablename/3"|bc
Sie auch perl -e
perl -e 'print 67/8'
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.
Die Anführungszeichen werden hier nicht angezeigt. Setzen Sie einfach die Anführungszeichen ('') nach = und nach bc. – SHIBLI
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. –
- 1. Wie teile ich Daten in verschiedenen Klassen
- 2. Wie teile ich Text in 2 Hälften?
- 3. Wie teile ich ein Wiki
- 4. Wie summiere und teile ich in MySql
- 5. Wie kann ich NSDate() in Teile aufteilen?
- 6. Wie teile ich meine Notizbücher in DataLab?
- 7. Wie kann ich verschiedene Teile der Datenstruktur nacheinander durchlaufen?
- 8. Wie teile ich das Verhalten der Akka-Schauspieler am besten?
- 9. Wie kann ich Teile der Webseite herunterladen und analysieren?
- 10. Xamarin portable library - Wie teile ich Klassen?
- 11. Wie teile ich Regex mit Variablenwerten auf?
- 12. Wie teile ich Code zwischen zwei Projekten?
- 13. Wie teile ich Projekte von Quellsicherheitszweigen?
- 14. Wie teile ich Daten zwischen Anwendungen?
- 15. Regex Teile der URL
- 16. Wie teile ich diese Zeichenfolge (Java)?
- 17. Wie rende ich * Teile * einer Svg-Datei?
- 18. MAKROS - Wie teile ich und dann Runde
- 19. Teile Teile git-Repository Gruppe von Benutzern wie in SVN
- 20. Wie teile ich einen Cookie mit PHP
- 21. Wie teile ich Dateien zwischen Grunt-Zielen?
- 22. Wie kann ich Zahlen in kleinere Teile in Javascript "aufteilen"?
- 23. Wie teile ich Verzeichnisse zwischen Git-Zweigen?
- 24. Wie teile ich Daten zwischen Javascript-Dateien?
- 25. Wie summiere ich bestimmte Teile einer Liste?
- 26. Wie teile ich die Textkipp-ID?
- 27. Wie animiere/aktualisiere nur Teile der Aktivität?
- 28. Solr: Teile der URL ausschließen
- 29. Wie lösche ich Teile einer Datei in Python?
- 30. Caching Teile der Seite in MVC 5
Ist das wirklich Programmierung verwandt? [http://stackoverflow.com/faq] –
Ü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
@ frank-v Bash kann für die Programmierung verwendet werden ... auch, diese Verbindung zur FAQ funktioniert nicht – chomp