Це перетворює перший раз в секунди:
ps -p $PROCID -o cputime,etimes | awk -F'[: ]+' '/:/ {t=$3+60*($2+60*$1); print t,$NF}'
Наприклад, команда ps створює:
$ ps -p 5403 -o cputime,etimes
TIME ELAPSED
01:33:38 1128931
awk
Команда обробляє це і повертає:
ps -p 5403 -o cputime,etimes | awk -F'[: ]+' '/:/ {t=$3+60*($2+60*$1); print t,$NF}'
5618 1128931
Пояснення
-F'[: ]+'
Це говорить awk, щоб розглядати як колонки, так і пробіли як роздільники поля. Таким чином, години, хвилини та секунди відображаються як окремі поля.
/:/ {t=$3+60*($2+60*$1); print t,$NF}
Початковий /:/
обмежує код працювати лише на лініях, що містять двокрапку. Це видаляє рядки заголовка. Кількість секунд обчислюється з годин, хвилин, секунд через t=$3+60*($2+60*$1)
. Потім отримане значення для t
друкується разом із минулим часом.
Поводження днів
Якщо ps
виробляються дні, години, хвилини, секунди, як у:
2-03:01:33
Потім скористайтеся цим кодом:
ps -p $PROCID -o cputime,etimes | awk -F'[-: ]+' '/:/ {t=$4+60*($3+60*($2+24*$1)); print t,$NF}'
Якщо дні можуть бути або не можуть бути попередженими до виводу, використовуйте цю комбінаційну команду:
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}'