您的位置:首页 > 运维架构 > Linux

Linux比较时间&循环处理文件

2018-01-11 00:00 211 查看
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}'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: