shell 脚本---每隔几个小时查看日志文件中包含某些字符串的行数

    

    在linux生产环境下,有如下这样的一个平常运维需要的工作。

    每隔一段时间,比如两个小时,就要对每秒都要产生日志的日志文件(这里假设为testfile.out,其绝对路径为/home/panlm/shellpra/testfile.out)进行一个操作,这个操作是将日志中包含某些字符串的行给单独打印出来,并重新放在一个文件(这里的文件假设为out.log)中。这些需要匹配的字符串可以按这种方式表示“0x216000ab”其中ab为01到18的连续整数。


    实现这样一个要求的做法主要有两步

    一、通过shell脚本,实现将目标日志中满足要求的行输出到一个新的文件中。

    二、通过crontab部署该脚本每两个小时运行一次


testfile.out 的内容如下

1231   0x21600001

32343  0x21600002

23123  0x21600003

42232  0x21600004

22323jkshdkfkadlfdsd


fjsdkdjf 0x21600018

sdafd     0x21600043

sajdkfjjjjls


一、shell脚本实现   

脚本名称为get.sh


#!/bin/bash


#define vars

Log_File="/home/panlm/shellpra/testfile.out  

sum=1 

#将字符串"0x216000ab"分为两部分,一部分为字符串固定部分,一部分为可变的整数部分

str1="0x216000"

str2="0x2160000"


for i in {1..18}

do

if [ "$sum" -lt 10 ]

then

                        #将两个字符串合并成一个字符串

str=${str2}${sum} 

#将满足结果的行数输出到结果文件out.log中

grep $str $Log_File |cat >> out.log

let "sum=$sum+1"

else

str=${str1}${sum}

                        #将满足结果的行数输出到结果文件out.log中

grep $str $Log_File |cat >> out.log

let "sum=$sum+1"

fi

     done


执行该脚本后得到的文件out.log内容如下

1231   0x21600001

32343  0x21600002

23123  0x21600003

42232  0x21600004

fjsdkdjf 0x21600018


二、每隔两个小时执行下该脚本

 0 */2 * * * /home/panlm/shellpra/get.sh 




本文出自 “爱技术,爱生活” 博客,请务必保留此出处http://youmiao.blog.51cto.com/6833914/1569181

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。