awk使用的简单例子 博客分类: Linux 脚本RESTUnixF#Apache
程序员文章站
2024-03-13 14:47:03
...
原始文本命名为log,内容只有一行:
如何以空格分割各字段:
1 2010-10-12
2 10:46:32,663
3 INFO
4 [com.peacock.rest.service.impl.MessageRestServiceImpl]
... ...
如何截取以am=开头的字符串:
对以am=开头的字符串进行<|>分割:
注意,因为<|>作为分隔符比较特殊,如果单纯使用<|>,awk会认为使用<或者>来分割。所以遇到|作为分隔符的话,使用[|]转义一下就可以了。
1 am=getUnreadMessageCount
2 ab=100
3 af=iPhone
4 adid=13288785908f5fe3fa6f1ef4a419c0cb5e5a72cc
... ...
输出每个函数以及执行它所花的时间(其中am=表示函数名,art=表示执行时间):
getUnreadMessageCount 0
关键地方是使用match和substr来获取art的值。
如果有多行记录,对它们进行排序:
2010-10-12 10:46:32,663 INFO [com.peacock.rest.service.impl.MessageRestServiceImpl] - am=getUnreadMessageCount<|>ab=100<|>af=iPhone<|>adid=13288785908f5fe3fa6f1ef4a419c0cb5e5a72cc<|>aip=58.163.175.132<|>wv=1.0<|>asid=3CBCD99761FEA49C571731727C7B9EF0<|>iua=iPhone<|>pov=3.1.2<|>abt=1<|>at=2010-10-12 10:46:32<|>ar=_<|>auid=479625<|>acode=000000<|>art=0
如何以空格分割各字段:
cat log|awk '{print $数字}'分别为(默认以空格分割):
1 2010-10-12
2 10:46:32,663
3 INFO
4 [com.peacock.rest.service.impl.MessageRestServiceImpl]
... ...
如何截取以am=开头的字符串:
cat log|awk '{match($0,"am=");print substr($0,RSTART)}'这里使用了match和substr两个内置函数。其中$0表示整行记录。
对以am=开头的字符串进行<|>分割:
cat log|awk '{match($0,"am=");print substr($0,RSTART)}'|awk -F "<[|]>" '{print $数字}'这里使用管道再次调用了awk。
注意,因为<|>作为分隔符比较特殊,如果单纯使用<|>,awk会认为使用<或者>来分割。所以遇到|作为分隔符的话,使用[|]转义一下就可以了。
1 am=getUnreadMessageCount
2 ab=100
3 af=iPhone
4 adid=13288785908f5fe3fa6f1ef4a419c0cb5e5a72cc
... ...
输出每个函数以及执行它所花的时间(其中am=表示函数名,art=表示执行时间):
cat log|awk '{match($0,"am=");print substr($0,RSTART)}'|awk -F "<[|]>" '{match($0,"art=[0-9]+");art=substr($0,RSTART,RLENGTH);printf "%s %d\n",substr($1,4),substr(art,5)}'输出:
getUnreadMessageCount 0
关键地方是使用match和substr来获取art的值。
如果有多行记录,对它们进行排序:
cat log|awk '{match($0,"am=");print substr($0,RSTART)}'|awk -F "<[|]>" '{match($0,"art=[0-9]+");art=substr($0,RSTART,RLENGTH);printf "%s %d\n",substr($1,4),substr(art,5)}'|sort -k1,1 -k2rn这里使用了sort命令和-k选项。首先根据函数名进行排序,然后再根据执行时间进行降序。