首页 > 解决方案 > Shell脚本在特定单词之后打印一些单词

问题描述

我是 shell 脚本的新手。我有一个日志文件,我只想grep“经过时间”并在此之后打印数字。

日志看起来像这样 -

Thread:MkdirSUProc workarea:92d70a0a8 cid_working_on:3164187 line:1085 clientIP:10.176.118.170:39575 elapsed time:649 ms additional_info:, Replication info:
stack:  fs/server/mapserver/create.cc:1085
        fs/server/mapserver/locks.cc:108 lkOwner:0x92c38c0a8
Thread:WriteFile workarea:9dbc7c538 cid_working_on:2402759 line:875 clientIP:10.176.118.170:0 elapsed time:17287 ms additional_info:, Replication info:  wa = 0x9dbc816c8
stack:  fs/server/mapserver/write/writev3.cc:875

想要输出 -

649
17287

每当我使用时grep,它都会打印整行。任何帮助和指导将不胜感激。

标签: linuxbashshellawkcommand-line

解决方案


第一个解决方案:这可以在单个中完成awk,您能否尝试以下操作。

awk 'match($0,/elapsed time:[0-9]+/){print substr($0,RSTART+13,RLENGTH-13)}' Input_file

第二种解决方案:使用字段分隔符尝试:

awk -F'elapsed time:|ms' '$2{print $2}' Input_file

输出如下。

649
17287

推荐阅读