2010-03-31 13 views

Respuesta

9

en shells como zsh/ksh, puedes usar flotadores para las matemáticas Si necesita más potencia de las matemáticas, utilizar herramientas como bc/awk/dc

por ejemplo

var=$(echo "scale=2;3.4+43.1" | bc) 
var=$(awk 'BEGIN{print 3.4*43.1}') 

mirar lo que está intentando hacer

awk '{printf "%.2f\n",$0/59.5}' ball_dropping_times >bull_velocities 
+0

Elegante, gracias. – hhh

+0

alguna idea sobre un signo de comentario para AWk? ¿Si deseo tener un formato explícitamente establecido para mis medidas? Leer solo las columnas puede ser confuso. – hhh

+0

no entiendo. muestre lo que quiere decir con ejemplos en su pregunta – ghostdog74

3

montón de maneras - más portátil es utilizar el comando expr:

expr 3 + 3 
54
echo $((3+3)) 
4

uso puede hacer uso del comando expr como:

expr 3 + 3 

para almacenar el resultado en una variable que puede hacer:

sum=$(expr 3 + 3) 

o

sum=`expr 3 + 3` 
+0

Me gustaría agregar (ya que esta publicación es aparentemente para principiantes de Unix) que los backticks en la última línea son para que el shell evalúe 'epr 3 + 3' antes de que se asigne la suma. –

21

expr es la manera estándar, pero sólo maneja números enteros.

golpe tiene un par de extensiones, que sólo manejar números enteros, así:

$((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 y (()) puede utilizarse para asignar valores de, por ejemplo,

let a=3+3 
((a=3+3)) 

de punto flotante puede utilizar bc

eco 3 + 3 | bc

1

resueltos gracias a Dennis, un ejemplo de 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 
+0

pon esto en tu pregunta. también, puedes usar un solo comando awk. Analiza archivos y se encarga de las matemáticas decimales. ver mi respuesta – ghostdog74

+1

Está utilizando el operador de redirección '>' que trunca (sobrescribe) el archivo de destino cada vez. Cámbialo al operador anexar '>>' o coloca la redirección después del 'done' en lugar de después del' bc' como este: 'done> ball_velocities'. –

2

creo que el método ((3 + 3)) es la más rápida, ya que está interpretado por el shell en lugar de un binario externo. cronometra un bucle grande usando todos los métodos sugeridos para el más eficiente.

+0

* Los procesos de nix están diseñados para ser extremadamente livianos y rápidos por exactamente esta razón. Por lo tanto, el uso de binarios externos no es tan lento teniendo en cuenta el rendimiento general de los scripts de los usos comunes. – SkyDan

Cuestiones relacionadas