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 comando awk
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'[: ]+'
Isto diz ao awk para tratar os dois pontos e espaços como separadores de campo. Desta forma, as horas, minutos e segundos aparecem como campos separados.
-
/:/ {t=$3+60*($2+60*$1); print t,$NF}
O
/:/
inicial restringe o código a funcionar apenas em linhas que incluam dois pontos. Isso remove as linhas de cabeçalho. O número de segundos é calculado a partir de horas, minutos e segundos por meio det=$3+60*($2+60*$1)
. O valor resultante parat
é então impresso ao lado do tempo decorrido.
Dias de manuseio
Se ps
produzir 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 podem ou não ser prefixados à 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}'