Formata a saída de / usr / bin / time para ignorar partes de segundos

2

Eu quero medir o tempo decorrido de um comando e mostrá-lo sem frações de segundos, não importando o pouco tempo necessário.

Por exemplo,

/usr/bin/time -f "%E (real)" SOMECOMMAND

pode retornar 4:36:05 para um processo de longa duração ou 7:27.32 para um processo curto.

No segundo exemplo, como posso formatá-lo como 7:27 ou 00:07:27 (zeros iniciais não importantes), de modo que é óbvio que são 7 minutos (e não 7 horas como eu pensava inicialmente) ?

As frações de segundos simplesmente não são necessárias para minhas medições.

    
por tephyr 22.01.2011 / 21:04

2 respostas

1

Se você estiver usando o Bash, poderá usar o comando time integrado. Ele gera "m" para minutos e "s" para segundos, em vez de dois-pontos ambíguos. Você pode controlar o formato de sua saída com a variável TIMEFORMAT :

$ time sleep 1.99

real    0m1.999s
user    0m0.004s
sys     0m0.004s
$ TIMEFORMAT=%0lR    # truncate (not round) the decimal seconds
$ time sleep 1.99
0m1s

O valor padrão de TIMEFORMAT :

TIMEFORMAT=$'\nreal\t%3lR\nuser\t%3lU\nsys%3lS'

Editar:

Você também pode usar sed para modificar a saída de /usr/bin/time para remover a ambigüidade de maneira semelhante:

$ /usr/bin/time -f "%E" sleep 1.99 2>&1 | sed 's/:\([^:]\+\)$/m/;s/:/h/;s/\..*//;s/$/s/'

Demonstração usando time de saída simulada:

$ echo -e '0:01.99\n10:11:12' | sed 's/:\([^:]\+\)$/m/;s/:/h/;s/\..*//;s/$/s/'
0m01s
10h11m12s
    
por 22.01.2011 / 21:52
1

Tente passar por este comando de corte. Eu não estou na frente de um shell Linux para experimentá-lo com certeza, para que sua milhagem possa variar. Por exemplo, não tenho certeza se o primeiro campo é zero ou um.

cut -d . -f 1

    
por 22.01.2011 / 21:25

Tags