本文介绍了linux华宁下利用文本处理工具awk 处理日志的使用案例,awk是Linux系统上文本处理利器
awk工具介绍
awk 是一种用于操作和处理文本文件的强大语言。当文本文件中的行是记录格式时,它特别有用。即包含由分隔符分隔的多个字段的记录。即使输入文件不是记录格式,您仍然可以使用 awk 进行一些基本的文件和数据处理。即使没有需要处理的输入文件,您也可以使用 awk 编写编程逻辑。
awk日志切分统计
nginx日志样例:
119.255.7.109 - [02/Nov/2019:15:44:36 +0800] "GET /xxx/app/main/refresh.jsp?r=1478072510132 HTTP/1.1" - 200 "User_Cookie:7F000001237921BE9237838AEC65704D"
119.255.1.109 - [02/Nov/2019:15:44:36 +0800] "GET /xxx/app/message/bb_query_service.jsp?READFLAG=0&MSGTYPES=1%2C2%2C3 HTTP/1.1" - 200 "User_Cookie:7F000001237921BE9237838AEC65704D"
192.168.3.2 - [02/Nov/2019:15:44:37 +0800] "GET /xxx/app/message/aa_query_service.jsp?READFLAG=0&MSGTYPES=1%2C2%2C3 HTTP/1.1" - 200 "User_Cookie:7F00000123D3BF2345115EAAC21F71E0"
独立UV统计
[root@localhost logs]# cat nginx.log | awk '{print $10}' | uniq -c |sort -r |wc -l
解释:awk 默认以空格切分日志,$10: 切分后数组第10个单元内容,提取的cookie信息作为独立UV的标识,uniq -c :去重, sort -r: 按统计数量倒叙默认升序, wc -l 统计总数量
独立IP统计
[root@localhost logs]# cat nginx.log | awk '{print $1}' | uniq -c |sort -r |wc -l
解释同上
PV总量统计
[root@localhost logs]# cat nginx.log | awk '{print $6}' | uniq -c |sort -r |wc -l
解释:$6:不同的URL区分pv
awk分隔符
对于特殊的日志格式需要特殊处理,需要用到分隔符参数 '-F'
比如日志
2022-08-01 14:03:07.044 INFO 1591 --- [http-nio-18989-exec-1] c.p.interceptor.abc : dd_request=>ip:192.168.2.6, url:http://XXXXX, status:200, protocol:HTTP/1.1, useragent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36
2022-08-01 14:03:42.614 INFO 1591 --- [http-nio-18989-exec-4] c.p.interceptor.abc : dd_request=>ip:192.168.9.22, url:http://aaaaa, status:200, protocol:HTTP/1.1, useragent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36
2022-08-01 14:04:04.909 INFO 1591 --- [http-nio-18989-exec-3] c.p.interceptor.abc : dd_request=>ip:192.168.10.28, url:http://bbbbb, status:200, protocol:HTTP/1.1, useragent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 YisouSpider/5.0 Safari/537.36
想要提取出IP地址,可以使用如下命令处理
[root@localhost logs]# cat aaa.log | awk -F '=>' '{print $2}' | awk -F ',' '{print $1}' | awk -F ':' '{print $2}' >> ip.txt
注意:这里要特别注意一点就是, 在发出 uniq 命令之前,请使用 sort 命令使所有重复行相邻。否则不相邻的数据起不到去重效果。
发表评论
取消回复