脚本输出日志技巧
修改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
转载于:https://blog.51cto.com/lhflinux/548014