標籤: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 指令碼---每隔幾個小時查看記錄檔中包含某些字串的行數