[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 求助!!log文件中数据去重统计问题

请高手给予解答:
手中有一个日志文件,记载了大量的日志信息,某一条日志格式如下:
*****01/Sep/2008:00:00:59 +0800] "GET /error_log/dll.htm&type=uninstall?dt=2008-08-31&ecs=3.8.8.21&*******&*****
我想要去重查找ecs=?的信息的个数。
比如包含ecs=3.8.8.21这个字符串的信息的条数。

  1. @echo off
  2. for /f "delims=" %%a in ('findstr/n "\<ecs\>" logfile.log') do echo %%a&set/a n+=1
  3. echo %n%条信息。
  4. pause
复制代码
心绪平和,眼藏静谧。

TOP

非常感谢您给我回帖!
俺想弱弱的问一下,这个批处理执行结果就是告诉我一共有多少条日志信息,我想要的是
ecs=3.8.8.1  10条
ecs=3.8.8.2   15条



这种形式。是我没表述清楚!

TOP

最好把你的LOG文件贴上来,如果过大,贴一部分好了。
心绪平和,眼藏静谧。

TOP

  1. * - - [01/Sep/2008:00:00:36 +0800] "GET /error_log/dll.htm&type=uninstall?dt=2003-10-17&ecs=3.8.8.21&*&aid=429 HTTP/1.1" 404 314 "-" "*"
  2. *- - [01/Sep/2008:00:00:41 +0800] "GET /error_log/dll.htm&type=uninstall?dt=2008-09-01&ecs=3.8.8.21&*&aid=429 HTTP/1.1" 404 314 "-" "*"
  3. *- - [01/Sep/2008:00:00:59 +0800] "GET /error_log/dll.htm&type=uninstall?dt=2008-08-31&ecs=3.8.8.21&*&aid=429 HTTP/1.1" 404 314 "-" "*"
  4. *- - [01/Sep/2008:00:01:13 +0800] "GET /error_log/dll.htm&type=uninstall?dt=2008-09-01&ecs=3.8.3.1&*&aid=429&gpu=ATI%20Mobility%20Radeon%20X1300&cpu=Intel(R)%20Core(TM)%20Duo%20CPU%20%20%20%20%20%20T2250%20%20@%201.73GHz HTTP/1.1" 404 314 "-" "*"
  5. *- - [01/Sep/2008:00:01:53 +0800] "GET /error_log/dll.htm&type=uninstall?dt=2008-09-01&ecs=3.8.8.21&*&aid=429 HTTP/1.1" 404 314 "-" "*"
  6. *- - [01/Sep/2008:00:02:22 +0800] "GET /error_log/dll.htm&type=uninstall?dt=2008-09-01&ecs=3.8.8.21&*&aid=429 HTTP/1.1" 404 314 "-" "*"
  7. *- - [01/Sep/2008:00:02:27 +0800] "GET /error_log/dll.htm&type=uninstall?dt=2008-09-01&ecs=3.8.8.30&*&aid=429&gpu=ATI%20Radeon%209550%20/%20X1050%20Series&cpu=%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Intel(R)%20Celeron(R)%20CPU%202.53GHz HTTP/1.1" 404 314 "-" "*"
复制代码
这是log文件的的几条记录!真的很大!

[ 本帖最后由 pusofalse 于 2008-9-2 15:34 编辑 ]

TOP

  1. @echo off
  2. for /f "tokens=3 delims=&" %%a in ('findstr /i "ecs=" "a.log"') do (
  3.   for /f "tokens=2 delims==" %%b in ("%%a") do (
  4.     if not defined ecs%%b (
  5.   set ecs%%b=1
  6. ) else (
  7.   set /a ecs%%b+=1
  8. )
  9.   )
  10. )
  11. for /f "tokens=1-2 delims==" %%a in ('set ecs') do (
  12.   echo %%a %%b条
  13. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=6 delims==&" %%a in ('findstr "\<ecs\>" l.log') do set "var=%%a"&set/a _!var!+=1
  3. for /f "tokens=1,2 delims=_=" %%a in ('set _') do echo ecs=%%a %%b条
  4. pause>nul
复制代码
心绪平和,眼藏静谧。

TOP

谢谢版主和巡查!:D

TOP

再次请教版主,我本想修改你给的代码再执行类似的去重,"uid=*"输入到一个txt文件,可是频频出错!
212.0.5.45 - - [01/Sep/2008:00:00:36 +0800] "GET /error_log/dll.htm&type=uninstall?dt=2003-10-17&ecs=3.8.8.21&*=3.8.8.15&*=3.8.8.21&*=3.8.8.15&meedb.dll=3.8.8.15&MediaLib.dll=3.8.8.15&*=3.8.8.1&splayers.dll=3.8.8.15&rndrmgr.dll=3.8.8.15&*=3.8.8.15&video.dll=3.8.8.15&subdecoder.dll=3.8.6.30&gifparser.dll=3.8.5.18&spfa.dll=3.8.8.1&uninst.exe=3.8.8.15&pid=&uid={5B70HA11-15W0-4CE6-B167-60884Y4AA80B}&aid=429 HTTP/1.1" 404 314 "-" "*"
我是不是修改一下tokens就可以了?

TOP

回复 9楼 的帖子

你应该先自己试试修改一下tokens行不行,不行再提问。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

汗,我修改的错误百出!我刚刚才接触批处理,有点。。。。
谢谢指教

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=2 delims={}" %%a in ('findstr/i "\<uid\>" l.log') do set "var=%%a"&set/a _!var!+=1
  3. for /f "tokens=1,* delims=_=" %%a in ('set _') do echo uid={%%a} %%b条
  4. pause>nul
复制代码
心绪平和,眼藏静谧。

TOP

测试结果

无效数字。数字常数只能是十进制(17),十六位进制(0x11)或
八进制(021)。
。。。。。。
无效数字。数字常数只能是十进制(17),十六位进制(0x11)或
八进制(021)。
环境变量 _ 没有定义
十分感谢版主回复,原来不只是改tokens啊

TOP

晕了,没招了。改不明白

TOP

我这里测试没问题。
心绪平和,眼藏静谧。

TOP

返回列表