提问人:NulisDefo 提问时间:10/15/2015 最后编辑:NulisDefo 更新时间:7/16/2017 访问量:6113
批量计数 /f 的 findstr 结果
batch counting findstr results for /f
问:
我有一个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)"
到目前为止,我的尝试如下:
findstr ^[1-9] apache.log
for /f %%G in ('findstr ^[1-9] apache.log') do echo result %%G
现在我明白了,在这种情况下,%%G 值被替换为每个 findstr 结果。有了这个,我得到了与 findstr 匹配的每一行的回声,然后是每个 IP 地址。为什么?
我相信也许我可以以某种方式利用 %%G 值每次都会变化的事实来设置我自己的变量。为什么 %%G 会精确地获取 IP 值?
或者也许我错了,我根本不需要 /f 来完成这项任务?
答:
10赞
user1016274
10/15/2015
#1
我会说你没有。只需将您的命令与DOS风格相结合:findstr
wc -l
findstr "^[1-9]" abc.txt | find /v "" /c
第一部分选择符合您意图的行,第二部分计算 (/c) 这些不匹配的行(即全部)。
edit:如果您需要变量中的结果:
for /f %%a in ('findstr /R "^[1-9]" abc.txt ^| find /c /v ""') do set "count=%%a"
评论
0赞
domih
2/10/2021
为什么推荐(这似乎有效)然后使用?wc -l
find
0赞
user1016274
2/11/2021
因为“wc”是一个 *nix 命令(Unix、Linux),并且不包含在 Windows 中,所以“find”自 DOS 以来一直存在。实际上,“wc -l”和“find /c”做同样的事情,即计数行。
0赞
domih
2/12/2021
哦,该死的,我忘了我已经安装了适用于 Windows 的 GNUtils :D
评论
for /f
%%G
%%H
for /?
delims=
tokens=