我有一个apache.log文件.我试图制作一个批处理文件,以便能够计算登录总量.基本上有很多行.
我最初的想法是设置一个变量results = 0,每当findstr命令得到一个结果,我得到+1变量值,最后显示值.不知道那是不是正确的思维方式.
到目前为止,我已经得到了/ f命令的印象可能是关键,虽然我从来没有使用它这么多部分我不清楚.
这是.log文件行的示例
67.195.112.96 - - [22/Feb/2010:00:06:03 +0200] "GET /www/kurpiai/dalyviai/?did=118 HTTP/1.0" 200 41119 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)"
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的尝试如下:
findstr ^[1-9] apache.log
for /f %%G in ('findstr ^[1-9] apache.log') do echo result %%G
Run Code Online (Sandbox Code Playgroud)
现在我明白在这种情况下,%% G值会被每个findstr结果替换.并且通过这个,我得到了匹配findstr的每一行的回声,然后是每个ip地址.为什么?
我相信也许某种程度上我可以使用%% G值每次都改变来设置我自己的变量的事实.为什么%% G正好得到一个ip值?
或者我错了,我根本不需要这个任务的/ f?
我会说你没有.只需将findstr命令与DOS样式结合使用wc -l:
findstr "^[1-9]" abc.txt | find /v "" /c
Run Code Online (Sandbox Code Playgroud)
第一部分选择符合您意图的行,第二部分计算(/ c)那些不匹配的行(即全部).
编辑:
如果您需要变量中的结果:
for /f %%a in ('findstr /R "^[1-9]" abc.txt ^| find /c /v ""') do set "count=%%a"
Run Code Online (Sandbox Code Playgroud)