批处理脚本读取每行文本文件并返回一个值?

时间:2009-02-13 04:58:22

标签: batch-file scripting

我想编写一个批处理脚本,该脚本应逐行读取文本文件并搜索关键字。

如果找到关键字,则应返回值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'。

最后但并非最不重要的是,我想要网站失败的总次数。

3 个答案:

答案 0 :(得分:3)

在Unix上

fgrep 'keyword' log.txt | wc -l

答案 1 :(得分: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失败:< / p>

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

答案 2 :(得分: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

祝你好运,
好色