使用etimes
選項(經過的時間進程開始,以秒爲單位)和awk
的systime()
函數返回以秒爲當前的時間戳。
假設第七列是etimes
,那麼AWK表達應該是這樣的:
NR == 1 ? "TIMESTAMP" : systime() - $7
例子:
ps -eo class,s,user,pid,pcpu,stat,etimes,cputime,args --sort=class | awk \
'$1 != "RR" && $1 != "FF" {print $0, NR == 1 ? "TIMESTAMP" : systime() - $7 }'
樣本輸出
CLS S USER PID %CPU STAT ELAPSED TIME COMMAND TIMESTAMP
TS S root 1 0.0 Ss 1717 00:00:01 init [3] 1479001705
TS S root 2 0.0 S 1717 00:00:00 [kthreadd] 1479001705
TS S root 3 0.0 S 1717 00:00:00 [ksoftirqd/0] 1479001705
如果你想取代第七欄,您可以覆蓋$7
變量:$7 = systime() - $7
。
如果命令的結果應該是進一步解析,我會--no-headers
選項去掉標題,例如:
ps --no-headers -eo class,s,user,pid,pcpu,stat,etimes,cputime,args \
--sort=class | awk '$1 != "RR" && $1 != "FF" { $7 = systime() - $7; print }'
樣本輸出
TS S root 1 0.0 Ss 1479001705 00:00:01 init [3]
TS S root 2 0.0 S 1479001705 00:00:00 [kthreadd]
TS S root 3 0.0 S 1479001705 00:00:00 [ksoftirqd/0]
注意,有不需要腳本中的next
語句,因爲它的用途是立即停止處理當前記錄並繼續下一條記錄,並且沒有語句(模式 - 動作對)在腳本結尾跳過。
實際上Q中有'next'後面有另一個腳本元素,即'0'。但它永遠不會匹配,所以仍然不需要「下一個」。 –