Vamos supor que o script que gera a saída seja chamado de generate
. Em seguida, para exibir o número de segundos necessários para gerar cada linha:
$ generate | ( t0=$(date +%s); while read -r line; do t1=$(date +%s); echo " $((t1-t0)) $line"; t0=$t1; done )
2 foo
0 foo
5 foo
3 foo
Os mesmos comandos espalhados por várias linhas se parecem com:
generate | ( t0=$(date +%s)
while read -r line
do
t1=$(date +%s)
echo " $((t1-t0)) $line"
t0=$t1
done
)
Como alternativa, por conveniência, podemos definir uma função de shell que contenha este código:
timer() { t0=$(date +%s); while read -r line; do t1=$(date +%s); echo " $((t1-t0)) $line"; t0=$t1; done; }
Podemos usar esta função da seguinte forma:
$ generate | timer
0 foo
2 foo
4 foo
3 foo
Como funciona
-
t0=$(date +%s)
Isso captura a hora atual no início do script em segundos desde a época.
-
while read -r line; do
Isso inicia um loop que lê a partir da entrada padrão
-
t1=$(date +%s)
Isso captura o tempo em segundos desde a época em que a linha atual foi capturada.
-
echo " $((t1-t0)) $line"
Isso imprime o tempo em segundos que levou para a linha atual.
-
t0=$t1
Isso atualiza
t0
para a próxima linha. -
done
Isso sinaliza o fim do loop
while
.