log格式:
2018-01-11 18:08:08,993 [http-bio-8080-exec-30] INFO [cn.letv.mstore.api.util.Log] - CheckUpdateController|checkupdate|106.114.85.182||862044035460430|602001|20|20|||-1|1084|5
脚本如下:
#!/bin/bash
date1="2018-01-11 15:14:53"
date2="2018-01-11 15:56:18"
#计算时间戳
t1=`date -d "$date1" +%s`
t2=`date -d "$date2" +%s`
#循环log
cat mstore.log |while read line
do
#提取行前19位
t=${line:0:19}
ct=`date -d "$t" +%s`
#比较时间区间
if [[ $t1 -lt $ct ]] && [[ $t2 -gt $ct ]];then
#提取行中的第5列,已|分割
echo $line|cut -d"|" -f5
fi
done
注:
这种方式处理的特别慢,不妨在log进入循环前尽可能多的过滤掉无用的log。比如:cat mstore.log|grep 2018-01-11\ 15|while read line
粗略计算:
#直接过滤15点10分到16点的数据提取
cat mstore.log|grep '2018-01-11 15:[1-5]\{1\}'|cut -d"|" -f5
提取多项信息:
#过滤多串数字,以“|”分割,第9列长度大于0,打印一行的前19个字符
cat mstore.log.2018-01-20|grep CheckUpdateController\|checkupdate\||grep '866479022302706\|869841021330029'|awk -F "|" '{if(length($9)>0) print substr($0,0,19),$5,$9}'