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

时间: 2024-10-17 01:11:42

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

Linux中查看日志文件的正确姿势,求你别tail走天下了!

作为一个后端开发工程师,在Linux中查看查看文件内容是基本操作了.尤其是通常要分析日志文件排查问题,那么我们应该如何正确打开日志文件呢?对于笔者这种小菜鸡来说,第一反应就是 cat,tail,vi(或vim)了,是的,我曾经用过好多次vim编辑器来查看日志文件. 千万不要使用vi命令来查看大文件内容, 尤其对于那些几十G的大文件.因为vi仅仅是一个编辑器(可以理解为windows中的记事本),使用vi命令后则会把文件所有内容加载到内存中,如果内存不够大的话,则可能会导致服务器瘫痪. 为了生成测

shell脚本每隔2s获取某个进程的cpu和mem数据并保存到csv文件

shell脚本每隔2s获取某个进程的cpu和mem数据并保存到csv文件 shell脚本如下echo "%CPU,%MEM" > cpu_test.csvpid=1 #Can be change by yourselfwhile true do top -bn1 -n 1 -p $pid | tail -1 | awk '{ print $9,$10 }' | sed 's/ /,/' >> cpu_test.csv sleep 2 #delay timedone 脚

shell脚本解析10(练习4)------监视文件

#!/bin/bash  #判断命令行是否代带有两个文件名的参数 if [ "$1" = "" ] || [ "$2" = "" ] then      echo "Please enter file name"      exit 1 fi  #判断目标文件是否存在 if [ -e $2 ] then   echo "The file already exists"   until [

当日志文件中的时间与主机时间不同步时,怎么监控每隔五分钟检测一次日志文件是否出自按某个关键字?

今有需求:需要监控每隔五分钟检测一次日志文件是否出自按某个关键字.利用过滤全部的日志信息 虽然可以过滤出来关键字告警,但是修复后,依然还是会报警,存在局限性,所以需要使用以下办法来实现需求. 本想循环获取5分钟内的时间戳,然后从日志文件中grep这个时间端的信息,然后再获取关键字,但是通过查看日志文件发现时间戳与主机时间不同步,所以,这种方法不可取.那么怎么获取最近五分钟的日志信息,再过滤关键字呢?思索了很久,又有了新思路.将现在的文件日志重定向到一个新的文件里面 cat /var/log/xx

SQLServer2000安装失败,[ODBC 驱动程序管理器]未发现数据源,详细信息请查看日志文件 sql2000 [Microsoft][ODBC 驱动程序管理器] 未发现数据源,参见sqlstp.org,直接退出

SQL2000安装失败,[ODBC 驱动程序管理器]未发现数据源,详细信息请查看日志文件 (2010-09-13 17:38:18) 转载▼ 最近安装数据库sql server2000时安装到要结束的时候,一下跳出"SQL2000安装失败,[ODBC 驱动程序管理器]未发现数据源,详细信息请查看日志文件"提示,一点确定就关闭,在网上找了好多,试了好多都不能解决,但是功夫不负有心人啊,最后终于找到了解决办法,在这跟大家分享下: 具体打开日志文件详细信息如下(具体位置在C:\WINDOWS

涛哥的Python脚本工具箱之批量替换目录所有指定扩展名的文件中的指定字符串

今天发布刚完成的涛哥的Python脚本工具箱之批量替换目录所有指定扩展名的文件中的指定字符串,命令行参数处理改用目前比较好用的argparse库,Python代码如下: #!/usr/bin/python2.7 # -*- encoding: UTF-8 -*- # Copyright 2014 [email protected] """replace old string with new string from all files in path 批量替换目录所有指定扩展

Linux下查看日志文件

在公司开发的时候,开发的程序在本地测试正常,但是在测试环境却有问题.这个时候第一反应就是查看日志文件,看看日志文件里面有什么错误信息.我潇洒的执行了一下 vim log.txt,然后就直接卡死了,打不开. 那怎么办,我还得查看啊.使用了cat命令,虽然没卡死,但是显示的文档明显不对,怎么办呢? 问了一下公司的前辈才知道,看日志文件,用tail命令,我直接vim打开,不卡死才怪! tail -f log.txt #显示最后的10行 tail -n 100 log.txt #显示最后的100行 原文

linux查看日志文件内容命令tail、cat、tac、head、echo详解

linux查看日志文件内容命令tail.cat.tac.head.echo tail -f test.log你会看到屏幕不断有内容被打印出来. 这时候中断第一个进程Ctrl-C, ---------------------------linux 如何显示一个文件的某几行(中间几行) 从第3000行开始,显示1000行.即显示3000~3999行cat filename | tail -n +3000 | head -n 1000 显示1000行到3000行cat filename| head -

windows编程按小时生成日志文件

这是一个简单的日志记录方法,为了避免单个日志文件过大,所以每个小时生成一个新的日志文件 注意:g_pLogPath 可以带路径,但是必须手动创建好路径,保证目录存在.而且要详细到log文件名,不能带后缀,后缀默认为.log 后缀名需要在createLogFileName()中修改,可以改为.txt log.h #pragma once #define WRITE_LOG_ENABLE //启用日志打印 #include <string> #include <Windows.h> #