Konwertuje to po raz pierwszy na sekundy:
ps -p $PROCID -o cputime,etimes | awk -F'[: ]+' '/:/ {t=$3+60*($2+60*$1); print t,$NF}'
Na przykład polecenie ps powoduje:
$ ps -p 5403 -o cputime,etimes
TIME ELAPSED
01:33:38 1128931
awk
Polecenie przetwarza że i powroty:
ps -p 5403 -o cputime,etimes | awk -F'[: ]+' '/:/ {t=$3+60*($2+60*$1); print t,$NF}'
5618 1128931
Wyjaśnienie
-F'[: ]+'
To mówi awk, aby traktował zarówno dwukropki, jak i spacje jako separatory pól. W ten sposób godziny, minuty i sekundy pojawiają się jako osobne pola.
/:/ {t=$3+60*($2+60*$1); print t,$NF}
Inicjał /:/
ogranicza kod do działania tylko w wierszach zawierających dwukropek. To usuwa linie nagłówka. Liczba sekund jest obliczana na podstawie godzin, minut i sekund przez t=$3+60*($2+60*$1)
. Wynikowa wartość dla t
jest następnie drukowana wraz z upływem czasu.
Obsługa dni
Jeśli ps
produkuje dni, godziny, minuty, sekundy, jak w:
2-03:01:33
Następnie użyj tego kodu zamiast:
ps -p $PROCID -o cputime,etimes | awk -F'[-: ]+' '/:/ {t=$4+60*($3+60*($2+24*$1)); print t,$NF}'
Jeśli dni mogą, ale nie muszą być poprzedzone danymi wyjściowymi, użyj tego polecenia kombinacji:
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}'