shell 學習四

腳本輸出日誌技巧

修改shell學習一中的腳本的日誌,輸出到一個fifo中。
編寫腳本從fifo中獲取日誌並按照星期和小時*實時*打印到日誌文件中。
日誌目錄爲0-6(按照星期),對應每個目錄下的日誌爲00.log--23.log(按照當前小時)

日誌事例:

[liuhaifeng@tc 2]$ head -2 test.txt
192.168.1.1 [2010 08:1 00:07:16] * a=(a,x,a) b=(b,b,y) c=(z,c,c)
192.168.1.1 [2010 08:1 01:07:16] * a=(a,x,a) b=(b,b,y) c=(z,c,c)

部分目錄情況示例如下:
|-- 0
|   |-- 00.log
|   |-- 01.log
|   |-- 02.log
|   |-- 03.log
|   |-- 04.log
|   |-- 05.log
|   |-- 06.log
|   |-- 07.log
|   |-- 08.log
|   |-- 09.log
|   |-- 10.log
|   |-- 11.log
|   |-- 12.log
|   |-- 13.log
|   |-- 14.log
|   |-- 15.log
|   |-- 16.log
|   |-- 17.log
|   |-- 18.log
|   |-- 19.log
|   |-- 20.log
|   |-- 21.log
|   |-- 22.log
|   `-- 23.log
|-- 1
|   |-- 00.log
|   |-- 01.log
|   |-- 02.log
|   |-- 03.log
|   |-- 04.log
|   |-- 05.log
|   |-- 06.log
|   |-- 07.log
|   |-- 08.log
|   |-- 09.log
|   |-- 10.log
|   |-- 11.log
|   |-- 12.log
|   |-- 13.log
|   |-- 14.log
|   |-- 15.log
|   |-- 16.log
|   |-- 17.log
|   |-- 18.log
|   |-- 19.log
|   |-- 20.log
|   |-- 21.log
|   |-- 22.log
|   `-- 23.log
 

shell如下:

‍#!/bin/bash
##
##第三個練習題,第二個問題,完成於2011.4.17 14:00
###說明 shell中嵌套了,3個while 循環,對於性能不太好,程序運行需要2-3S
####文件或者目錄信息###
D=`pwd`
log="test.txt"

###創建fifo,並將log導入到fifo中去
mkfifo MYFIFO
cat ${log} > MYFIFO &
sleep 2
cat < MYFIFO >> test.fifo
fifo_log="test.fifo"

###取得log日誌中記錄的年份,加入只記錄一年的
years=`head -1 ${fifo_log}|awk -F "[ :]+" '{print $2}'|cut -c 2-`

###取得log日誌中的起始月份
startmonth=`head -1 ${fifo_log}|awk -F "[ :]+" '{print $3}'`

###取得log日誌中的最大月份
endmonth=`tail -1 ${fifo_log}|awk -F "[ :]+" '{print $3}'`


###開始跑程序
cd ${D}
while [ $startmonth -le $endmonth ]
do
        ### 計算這個月份的總天數
        totalday=`cal $startmonth $years|xargs|awk '{print $NF}'`
        startday=1
        while [ $startday -le $totalday ]
        do
                ###創建星期的文件夾 例如 0-6
                week_dir=`date -d ${years}-${startmonth}-${startday} +"%w"`
                mkdir ./test/${week_dir}

                ###每天日誌記錄的開始和結尾的小時
                starthour=`grep -E "$years $startmonth:$startday" ${fifo_log}|head -1 |awk -F "[ :]+" '{print $5}'`
                endhour=`grep -E "$years $startmonth:$startday" ${fifo_log}|tail -1 |awk -F "[ :]+" '{print $5}'`

                while [ $starthour -le $endhour ]
                do
                        ###找出相應時間段的log,插入相應文件夾中的相應名字中的log裏面
                        grep -E "$years $startmonth:$startday $starthour:[0-9]+:[0-9]+" ${fifo_log} >> ./test/${week_dir}/$starthour.log
                        starthour=`expr $starthour + 1`
                        starthour=`printf "%02d" $starthour`
                done
                startday=`expr $startday + 1`
                startday=`printf "%02d" $startday`
        done
        startmonth=`expr $startmonth + 1`
        startmonth=`printf "%02d" $startmonth`
done

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章