¿Cómo usar el comando de tiempo en bash, para sumar sys + tiempo de usuario y generarlo en milisegundos?

1

El timecomando devuelve una tabla como esta?

real      0m1.607s
user    0m0.154s
sys 0m0.032s

Estoy ejecutando esto dentro de un script de shell. ¿Cuál es la forma más sencilla de procesar la timesalida para que obtenga una variable $RUNTIMEque contenga la suma usuario + sys en milisegundos?

llamar
fuente
@ l0b0 No estoy seguro de por dónde empezar. Sé cómo sumar dos variables en bash, así que si me enseñas cómo analizar la salida de timepara obtener las dos variables, $sysy $userpuedo
sumarlas

Respuestas:

2

Si necesita usar la timefunción incorporada bash , usaría el siguiente comando:

a=$(echo $( TIMEFORMAT="%3U + %3S"; { time your_command; } 2>&1) "*1000" | bc -l)

Ejemplos:

a=$(echo $( TIMEFORMAT="%3U + %3S"; { time sleep 1; } 2>&1) "*1000" | bc -l)
echo $a
2.000

a=$(echo $( TIMEFORMAT="%3U + %3S"; { time sudo hdparm -t -T /dev/sda 2>&1 >/dev/null; } 2>&1) "*1000"  | bc -l)
echo $a
2302.137
Sylvain Pineau
fuente
¿Eso es en milisegundos? ¿Qué pasa si el comando tarda más de 1 segundo?
becko
¿Y cómo almaceno el resultado en una variable?
becko
He actualizado mi respuesta para almacenar en una variable en ms
Sylvain Pineau
Soy consciente de que esto es askubuntu, pero como una advertencia para personas como yo: en macOS, en echo "2.577 + 0.164 * 1000" | bc -l realidad se evalúa como 166.577. Debes insertar explícitamente los paréntesis alrededor de la suma para obtener la respuesta correcta.
Wen
1

Hacer esto

Ejecute su comando usando el siguiente script, sustituto your_command.

$ ALL_TIME=`(time your_command) 2>&1 | grep -E "user|sys" | sed s/[a-z]//g`

ahora la variable ALL_TIME almacena dos valores: `

$ echo $ALL_TIME
00.001 00.003

Ahora necesita resumir los valores. Use el script a continuación

No olvide establecer RUNTIME en cero .

$ RUNTIME=0
$ for i in $ALL_TIME; do RUNTIME=`echo "$RUNTIME + $i"|bc`; done
$ echo $RUNTIME
.004

Fuentes

Cómo grep del tiempo

¿Redirigir la salida del comando de tiempo en Unix a una variable en bash?

c0rp
fuente