在linux中使用shell来分析统计日志中的信息

在运维工作中,要经常分析后台系统的日志,通过抓取日志中的关键字信息,对抓取结果进行统计,从而为监控结果提供基础数据。
下面的shell演示了如何从大量的日志中取得想要的统计结果。其中展示了各种有趣的命令和shell的用法。
具体功能就是统计出某个关键字在不同时段的出现次数。结果格式为“HH 次数”

#!/bin/sh

# 取得YYYYMMDD格式的日期,以确定所要抓取的日志文件范围
current_date=`date "+%Y%m%d"`;

# 拼接组成需要抓取的日志文件名称
file_name=$current_date"*all*";

# 在一批日志文件中查找某个关键字,并将查找结果形成一个临时文件。
# 临时文件的结果格式为:文件名:日志内容
#./pmclog/20171020_all_000000.log:00:00:00.876652|D|38|0327|get|CAccumulate.cpp|delete main
grep 'delete main' ./pmclog/$file_name >> term_del.log;

# 从临时文件中取得时段信息,该信息是原始日志内容的前两个字符,并将结果保存到临时文件中
# 如果需要其他信息,那么就需要修改awk的命令参数了。
awk -F ':' '{print $2}' term_del.log >> term_del_hour.log;

rm term_del.log;
rm term_del_hour_times.log;

# 取得当前的时段
hour=`date "+%H"`;

# 使用循环,对今天的每个时段进行统计
for(( i=0; i<= $hour; i++))
do
    # 作为数字的时候,变量i的前面是没有0的,这里要格式化出来一个0来,0点就是“00”,这样可以与临时文件中的信息相匹配
    hour2=$(printf '%02d' $i);
    
    # 使用 grep -o 和 wc -l的结合操作,就可以统计一个特定字符在文件中出现的次数。
    # 在前面使用echo 可以标记出来每一个次数是哪个时段的数据
    # 最终的term_del_hour_times.log就是最终的结果文件。
    echo $hour2 `grep -o $hour2 term_del_hour.log | wc -l` >> term_del_hour_times.log;
done;

rm term_del_hour.log ;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值