2009-02-13 40 views
1

我想編寫一個批處理腳本,它應該逐行讀取文本文件並搜索關鍵字。批處理腳本讀取文本文件的每一行並返回一個值?

如果找到關鍵字,它應返回值0否則應返回1. 像這樣,它應該繼續遞增值直到文件結束。 輸出應該轉到一個文件。

樣品日誌如下,

Website is available HTTP/1.1 200 OK 
Website is available HTTP/1.1 200 OK 
Website is available HTTP/1.1 200 OK 
Website is available HTTP/1.1 200 OK 
Website is available HTTP/1.1 200 OK 
Website is available HTTP/1.1 200 OK 

基本上我要算失敗網站的次數。所以,如果網站是好的,那麼它應該返回值'0',如果它不是值'1'。

最後但並非最不重要我想要網站失敗的總次數。

+0

您是否在尋找一個DOS批處理腳本或Unix的shell腳本? 日誌在失敗時會是什麼樣子? – 2009-02-13 05:03:45

+0

這當然可以在批處理文件中完成,但我會問爲什麼?爲什麼不學習一些更有用的東西,如果你必須學習東西呢? – EBGreen 2009-02-13 05:06:08

回答

3

在Unix

fgrep 'keyword' log.txt | wc -l 
+0

更短:fgrep -c'關鍵字'log.txt – Thomas 2009-02-13 05:06:46

3

對於Windows .BAT:

FINDSTR /V /B /C:"HTTP/1.1 2" log.txt 

將列出每一行沒有(/ V)開始(/ B)的文字(/ C :)串「HTTP/1.1 2」。由於HTTP成功代碼位於200塊(例如,203用於緩存命中),因此這將只列出不成功的響應。 FINDSTR確實有一些正則表達式的支持,但它很弱,(尤其是沒有分組或替換),所以如果你想用FINDSTR過濾掉多個響應代碼,你必須鏈接它們,例如也要過濾Auth失敗:

FINDSTR /V /B /C:"HTTP/1.1 2" log.txt | FINDSTR /V /B /C:"HTTP/1.1 403" 
0

在DOS上它將是下面一行。將「FAIL STRING」替換爲服務器死亡時將包含的任何行。

FIND /C "FAIL STRING" log.txt

當存在包含 「FAIL STRING」

---------- log.txt的兩行輸出此類似如下:2

您也可以使用%ERRORLEVEL%來確定是否有任何失敗。就像這樣:

FIND /C "FAIL STRING" log.txt
IF ERRORLEVEL 1 ECHO Everything is A-OK
IF NOT ERRORLEVEL 1 ECHO There were failures

好運,
蘭迪

相關問題