查看: 1493|回复: 0

[PHP代码] linux下使用awk命令按时间段筛选日志

发表于 2017-10-24 08:00:03
需求

很多时候我们需要按照时间段来进行日志的分析,比如说查看上午的,或者某月某日的的具体日志,就不能简单实用tail -f或者head -n命令了。这个时候我们需要借用awk。

命令
  1. zcat com.log20160529.gz | grep 'dianping_reply.log'| awk '{split($4,array,"[");if(array[2]>="29/May/2016:00:00:26" && array[2]<="29/May/2016:00:01:14"){print $0}}'
复制代码
解释

扫描gz压缩文件,从中寻找带有dianping_reply的行,将改行按照[进行拆分,然后直接使用if条件进行判断,比较,最终输出想要的结果。
命令解析:

zcat 直接读取压缩文件的内容
grep用来过滤特定字符的行
awk 用来执行命令
split用来切分字符串

另外一种情况

test.log

  1. [22/Feb/2017-18:51:58] api.momo.com /api/feed HTTP/1.1 121.0.0.1 android1.2
  2. [22/Feb/2017-18:51:59] api.momo.com /api/follow HTTP/1.1 121.0.0.2 iphone1.1
  3. [22/Feb/2017-18:52:58] api.momo.com /api/user HTTP/1.1 121.0.0.3 iphone1.1
  4. [22/Feb/2017-18:52:41] api.momo.com /api/feed HTTP/1.1 121.0.0.4 android1.2
  5. [22/Feb/2017-18:56:30] api.momo.com /api/follow HTTP/1.1 121.0.0.2 android1.2
  6. [22/Feb/2017-18:51:21] api.momo.com /api/user HTTP/1.1 121.0.0.3 iphone1.1
  7. [22/Feb/2017-18:59:58] api.momo.com /api/user HTTP/1.1 121.0.0.3 android1.2
  8. [22/Feb/2017-18:51:21] api.momo.com /api/feed HTTP/1.1 121.0.0.1 iphone1.1
复制代码

查询22/Feb/2017-18:52:59之前的日志

  1. cat test.log | awk '{split($1,array,"[");split(array[2],array2,"]");if(array2[1] >= "22/Feb/2017-18:52:59"){print($0)}}'
复制代码


回复

使用道具 举报