2008年12月27日--awk處理日志時發現問題。
發現個問題,把幾行指令寫到一個腳本檔案裡面執行,和用for循環執行居然效果不同。
寫了好多行指令時輸出正常;用for循環執行的輸出時是錯誤的資料。
下面具體說明:
需求:
想檢視apache日志中00:00:00到00:59:59間的記錄的總行數。
PS:有這個需求的原因是最近日志分期出了問題,通路量波動巨大。
我的思路:
想到用awk '/00:00:00/' log | wc >> wc.txt的方法找到00:00:00通路的記錄的行數,然後1秒1秒的逐個運作之後再相加等等。
遇到的問題:
在一個..ch中寫入如下内容時,可以正常的看到wc.txt裡面有好多行,每行都會顯示正常的數字,和單獨運作一個awk指令是一樣的沒有問題。
awk '/00:00:00/' log | wc >> wc.txt
awk '/00:00:01/' log | wc >> wc.txt
在..ch中寫入如下内容時,看到wc.txt裡面也有好多行,但是每行的數字都是零這肯定是不對的。
for ((a=0;a<=1;a++));
do
awk '/00:00:0$a/' log | wc >> wc.txt;
done
2008年12月28日--看來是找到答案了。
27号發現問題後在CU-www.chinaunix.net論壇裡面發帖求助。
請看文章裡面說明的。
2008年12月29日--最後的成果。
腳本一個(不過我覺得直接運作兩行指令就行了,腳本裡面就是加了個計算而已)内容如下:
#!/bin/bash
a=$(awk '/00:00:00/,/00:59:59/' 081222_access_log | wc -l)
b=$(awk '/00:59:59/' 081222_access_log | wc -l)
let "total=a+b-1"
echo "total=$total"
本文轉自 sharkyan 51CTO部落格,原文連結:http://blog.51cto.com/sharkyan/122819,如需轉載請自行聯系原作者