天天看點

shell腳本問題01--awk

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,如需轉載請自行聯系原作者