Devo variabili e voglio trovare il valore di uno diviso per l'altro. Quali comandi dovrei usare per fare questo?Come divido nella console Linux?
risposta
Presumo che da console Linux intendi Bash.
Se X
e Y
sono le variabili, $(($X/$Y))
restituisce quello che chiedi.
Non sono necessari gli $ per le variabili – Draemon
Nella shell bash, circondano espressioni aritmetiche con $((...))
$ echo $((7/3))
2
Anche se credo che si sono limitati a numeri interi.
Sì, bash è limitato alla matematica intera. – mkb
Esempio di divisione intera usando bash per dividere $ a di $ b:
echo $((a/b))
In bash, se non hai bisogno di decimali nella vostra divisione, si può fare:
>echo $((5+6))
11
>echo $((10/2))
5
>echo $((10/3))
3
io preferisco ancora utilizzando dc, che è un calcolatore RPN, sessione in modo veloce da dividere 67 da 18 con 4 cifre precisione sarebbe simile
>dc
4k
67
18/p
3.7222
q
>
Ovviamente, molto più disponibile: uomo dc
Alcuni suggerimenti per salvare un viaggio in 'man': RPN = Reverse Polish Notation; in breve: si entra prima per gli operandi, poi per l'operatore. Per emettere il risultato è necessario un 'p' che termina. La versione non interattiva del calcolo di cui sopra è: 'dc -e '4k 67 18/p''. Avvertenza: non impostando la precisione (con '{numPlaces} k'), il valore predefinito è 0, cioè divisione in interi. – mklement0
Modo migliore è quello di utilizzare "bc", un calcolatore di precisione arbitraria.
variable=$(echo "OPTIONS; OPERATIONS" | bc)
es:
my_var=$(echo "scale=5; $temp_var/100 + $temp_var2" | bc)
dove "scale = 5" è la precisione.
man bc
fornito con diversi esempi di utilizzo.
Fresco; una cosa da notare: non impostando i valori di default 'scale' su divisione intero, a meno che non si specifichi' -l', come note @raytrace di seguito, che apparentemente fornisce 20 cifre decimali per impostazione predefinita, ma carica anche una libreria con funzioni aggiuntive. – mklement0
echo 5/2 | bc -l
2,50000000000000000000
questa opzione '-l' a 'bc' permette galleggiante risultati
Fresco; con '-l', si ottengono 20 posizioni decimali di default * e * viene caricata una libreria matematica che definisce funzioni aggiuntive come il seno; per specificare esplicitamente il numero di posizioni decimali, anteporre l'espressione con 'scale = {numPlaces};' (anche), come dimostrato nella risposta di @ user1504475. In altre parole: '-l' è una comoda alternativa alla specifica di' scale = 20; ', ma ha un costo di prestazioni dovuto al caricamento della libreria - l'impatto nel mondo reale sembra tuttavia trascurabile. – mklement0
Qualcos'altro si potrebbe fare usando la risposta di raytracing. Potresti usare lo stdout di un'altra chiamata di shell usando i backtick per fare alcuni calcoli. Ad esempio, volevo sapere la dimensione del file delle prime 100 righe da un paio di file. La dimensione originale da wc -c
è in byte, voglio sapere kilobyte. Ecco quello che ho fatto:
echo `cat * | head -n 100 | wc -c`/1024 | bc -l
È possibile utilizzare awk che è un programma di utilità/linguaggio progettato per l'estrazione dei dati
esempio per 1.2/3.4
>echo 1.2 3.4 | awk '{ print $2/$1 }'
0.352941
Si dovrebbe cercare di utilizzare:
echo "scale=4;$variablename/3"|bc
è anche possibile utilizzare perl -e
perl -e 'print 67/8'
Ho anche avuto lo stesso problema. È facile dividere i numeri interi ma i numeri decimali non sono così facili. se hai 2 numeri come 3.14 e 2.35 e dividi i numeri allora, il codice sarà Divisione = echo 3.14/2.35 | bc
echo "$ Division" le virgolette sono diverse. Non essere confuso, si trova proprio sotto il pulsante esc sulla tastiera. L'UNICA DIFFERENZA È IL | bc e anche qui echo funziona come operatore per i calcoli aritmetici al posto della stampa. Quindi, ho aggiunto echo "$ Division" per stampare il valore. Fammi sapere se funziona per te. Grazie.
Le virgolette non sono mostrate qui, Quindi, basta mettere le virgolette ('') dopo = e dopo bc. – SHIBLI
Questi non sono citazioni. Sono accenti acuti. Non vengono mostrati perché StackOverflow li usa per evidenziare frammenti di codice "alcuni codici qui" sono stati appena avvolti negli accenti acuti. –
Si tratta di una vera e propria programmazione? [http://stackoverflow.com/faq] –
Controlla questo articolo: [http://www.basicallytech.com/blog/index.php?/archives/23-command-line-calculations-using-bc.html] (http://www.basicallytech.com/blog/index.php?/archives/23-command-line-calculations-using-bc.html) – freitass
@ frank-v Bash può essere utilizzato per la programmazione ... inoltre, il collegamento a faq non funziona – chomp