Como usar o comando time no bash, para somar sys + user time, e imprimi-lo como milissegundos?

1

O comando time retorna uma tabela como essa?

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

Estou executando isso dentro de um script de shell. Qual é a maneira mais simples de processar time output para que eu obtenha uma variável $RUNTIME que mantenha a soma user + sys em milissegundos?

    
por becko 14.05.2014 / 18:10

2 respostas

2

Se você precisar usar a função bash time builtin, use o seguinte comando:

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

Exemplos:

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
    
por Sylvain Pineau 14.05.2014 / 20:08
1

Faça isso

Execute seu comando usando o script abaixo, substitua your_command .

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

agora variável ALL_TIME armazena dois valores: '

$ echo $ALL_TIME
00.001 00.003

Agora você precisa resumir os valores. Use o script abaixo

Não se esqueça de definir RUNTIME como zero .

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

Fontes

Como grep do tempo

Redirecionar a saída do comando time no unix em uma variável no bash?

    
por c0rp 14.05.2014 / 19:40