echo 3+3
Come posso valutare tali espressioni in Bash, in questo caso a 6?Bash: valuta un termine matematico?
echo 3+3
Come posso valutare tali espressioni in Bash, in questo caso a 6?Bash: valuta un termine matematico?
in gusci, come zsh/ksh, è possibile utilizzare i galleggianti per la matematica. Se avete bisogno di più potenza di matematica, utilizzare strumenti come bc/awk/dc
esempio
var=$(echo "scale=2;3.4+43.1" | bc)
var=$(awk 'BEGIN{print 3.4*43.1}')
guardando a ciò che si sta cercando di fare
awk '{printf "%.2f\n",$0/59.5}' ball_dropping_times >bull_velocities
molti modi - più portatile è quello di utilizzare il comando expr:
expr 3 + 3
echo $((3+3))
Usa può fare uso del comando expr come:
expr 3 + 3
Per memorizzare il risultato in una variabile si può fare:
sum=$(expr 3 + 3)
o
sum=`expr 3 + 3`
vorrei aggiungere (dato che questo post è a quanto pare per i principianti Unix) che i backticks su l'ultima riga sono così il guscio valuta 'epr 3 + 3' prima somma viene assegnato. –
expr
è il modo standard, ma gestisce solo numeri interi.
bash ha un paio di estensioni, che gestire solo interi così:
$((3+3)) returns 6
((3+3)) used in conditionals, returns 0 for true (non-zero) and 1 for false
let 3+3 same as (())
let
e (())
possono essere utilizzati per assegnare valori, ad esempio
let a=3+3
((a=3+3))
per virgola mobile è possibile utilizzare bc
eco 3 + 3 | bc
risolti grazie a Dennis, un esempio di BC-uso:
$ cat calc_velo.sh
#!/bin/bash
for i in `cat ball_dropping_times`
do
echo "scale=20; $i/59.5" | bc
done > ball_velocities
metti questo nella tua domanda. inoltre, puoi semplicemente usare un comando awk. Analizza i file e si occupa della matematica decimale. guarda la mia risposta – ghostdog74
Si sta utilizzando l'operatore di reindirizzamento '>' che tronca (sovrascrive) il file di destinazione ogni volta. Cambialo all'operatore append '>>' o metti il reindirizzamento dopo 'done' invece che dopo' bc' in questo modo: 'done> ball_velocities'. –
Credo che il metodo ((3 + 3)) sia il più rapido in quanto è interpretato dal shell piuttosto che un binario esterno. volta che un ciclo di grandi dimensioni utilizzando tutti i metodi suggeriti per la più efficiente.
* I processi nix sono progettati per essere estremamente leggeri e veloci proprio per questo motivo. Quindi usare i binari esterni non è così lento considerando le prestazioni complessive degli script di usi comuni. – SkyDan
Elegante, grazie. – hhh
qualche idea su un segno di commento per AWk? Se voglio avere un formato esplicitamente dichiarato per le mie misurazioni? Leggere solo le colonne può essere fonte di confusione. – hhh
non capisco. mostra cosa intendi con esempi nella tua domanda – ghostdog74