shell 指令碼---每隔幾個小時查看記錄檔中包含某些字串的行數

來源:互聯網
上載者:User

標籤: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

shell 指令碼---每隔幾個小時查看記錄檔中包含某些字串的行數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.