我是awk编程的新手,我尝试通过
提取进程运行时间$ ps -o etime -p 18613 | awk /[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/
1-00:05:52
我知道如果超过一天,它将以dd -hh:mm:ss的格式,但我只是觉得混淆了正则表达式/ [0-9] [0-9]:[0-9] [0 -9]:[0-9] [0-9] /也会提取“dd-”,为什么不在我的结果中显示“00:05:52”?
答案 0 :(得分:0)
正如西蒙在对你的问题的评论中所说,awk
在使用这种方式时,只会完整地打印匹配的行。
对于你的特定情况,我认为只打印出第二行,减去前三个字符(即从第四个字符开始)就足够了,你可以这样做:
ps -o etime -p 18613 | awk 'NR == 2 { print substr($0, 4); }'
答案 1 :(得分:0)
要做你正在尝试用RE做的事情:
ps -o etime -p 18613 |
awk 'match($0,/[0-9][0-9]:[0-9][0-9]:[0-9][0-9]/) { print substr($0,RTSTART,RLENGTH) }'
或在GNU awk中,如果每一行与您的RE匹配:
ps -o etime -p 18613 |
awk '{print gensub(/.*([0-9][0-9]:[0-9][0-9]:[0-9][0-9]).*/,"\\1","") }'