Isso converte a primeira vez em segundos:
ps -p $PROCID -o cputime,etimes | awk -F'[: ]+' '/:/ {t=$3+60*($2+60*$1); print t,$NF}'
Como exemplo, o comando ps produz:
$ ps -p 5403 -o cputime,etimes
TIME ELAPSED
01:33:38 1128931
O awk
comando processa isso e retorna:
ps -p 5403 -o cputime,etimes | awk -F'[: ]+' '/:/ {t=$3+60*($2+60*$1); print t,$NF}'
5618 1128931
Explicação
-F'[: ]+'
Isso indica ao awk para tratar dois pontos e espaços como separadores de campo. Dessa forma, as horas, minutos e segundos aparecem como campos separados.
/:/ {t=$3+60*($2+60*$1); print t,$NF}
A inicial /:/
restringe o código a trabalhar apenas em linhas que incluem dois pontos. Isso remove as linhas do cabeçalho. O número de segundos é calculado a partir de horas, minutos, segundos via t=$3+60*($2+60*$1)
. O valor resultante para t
é impresso ao lado do tempo decorrido.
Dias de manipulação
Se ps
produz dias, horas, minutos, segundos, como em:
2-03:01:33
Em seguida, use este código:
ps -p $PROCID -o cputime,etimes | awk -F'[-: ]+' '/:/ {t=$4+60*($3+60*($2+24*$1)); print t,$NF}'
Se os dias puderem ou não ser anexados à saída, use este comando de combinação:
ps -p $PROCID -o cputime,etimes | awk -F'[-: ]+' '/:/ && NF==5 { t=$4+60*($3+60*($2+24*$1)); print t,$NF} /:/ && NF==4 {t=$3+60*($2+60*$1); print t,$NF}'