Questo converte la prima volta in secondi:
ps -p $PROCID -o cputime,etimes | awk -F'[: ]+' '/:/ {t=$3+60*($2+60*$1); print t,$NF}'
Ad esempio, il comando ps produce:
$ ps -p 5403 -o cputime,etimes
TIME ELAPSED
01:33:38 1128931
Il awk
comando elabora e restituisce:
ps -p 5403 -o cputime,etimes | awk -F'[: ]+' '/:/ {t=$3+60*($2+60*$1); print t,$NF}'
5618 1128931
Spiegazione
-F'[: ]+'
Questo dice a awk di trattare sia i due punti sia gli spazi come separatori di campo. In questo modo, le ore, i minuti e i secondi vengono visualizzati come campi separati.
/:/ {t=$3+60*($2+60*$1); print t,$NF}
L'iniziale /:/
limita il funzionamento del codice solo su linee che includono due punti. Ciò rimuove le righe di intestazione. Il numero di secondi viene calcolato da ore, minuti, secondi tramite t=$3+60*($2+60*$1)
. Il valore risultante per t
viene quindi stampato lungo il lato con il tempo trascorso.
Giorni di trattamento
Se ps
produce giorni, ore, minuti, secondi, come in:
2-03:01:33
Quindi utilizzare questo codice invece:
ps -p $PROCID -o cputime,etimes | awk -F'[-: ]+' '/:/ {t=$4+60*($3+60*($2+24*$1)); print t,$NF}'
Se i giorni possono o meno essere anteposti all'output, utilizzare questo comando combinato:
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}'