使用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'。但它永远不会匹配,所以仍然不需要“下一个”。 –