Esto convierte la primera vez a segundos:
ps -p $PROCID -o cputime,etimes | awk -F'[: ]+' '/:/ {t=$3+60*($2+60*$1); print t,$NF}'
Como ejemplo, el comando ps produce:
$ ps -p 5403 -o cputime,etimes
TIME ELAPSED
01:33:38 1128931
El awk
comando procesa eso y devuelve:
ps -p 5403 -o cputime,etimes | awk -F'[: ]+' '/:/ {t=$3+60*($2+60*$1); print t,$NF}'
5618 1128931
Explicación
-F'[: ]+'
Esto le dice a awk que trate los dos puntos y los espacios como separadores de campo. De esta manera, las horas, minutos y segundos aparecen como campos separados.
/:/ {t=$3+60*($2+60*$1); print t,$NF}
La inicial /:/
restringe el código para trabajar solo en líneas que incluyen dos puntos. Esto elimina las líneas de encabezado. El número de segundos se calcula a partir de horas, minutos, segundos a través de t=$3+60*($2+60*$1)
. El valor resultante para t
se imprime a lo largo del lado con el tiempo transcurrido.
Días de manipulación
Si ps
produce días, horas, minutos, segundos, como en:
2-03:01:33
Luego, use este código en su lugar:
ps -p $PROCID -o cputime,etimes | awk -F'[-: ]+' '/:/ {t=$4+60*($3+60*($2+24*$1)); print t,$NF}'
Si los días pueden o no estar antepuestos a la salida, utilice este comando combinado:
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}'