[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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 "tokens=10-13 delims==*& " %%a in (1.log) do set/a _%%a_%%b+=1&set/a _%%c_%%d+=1
  3. for /f "tokens=1-3 delims=_=" %%a in ('set _') do echo %%a=%%b  %%c 条
  4. pause>nul
复制代码

TOP

回复 17楼 的帖子

我明白原因了。。。试下这样!
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=2 delims={}" %%a in ('findstr/i "\<uid\>" l.log') do (
  3. set "var=%%a"
  4. set/a _!var:-=#!+=1
  5. )
  6. for /f "tokens=1,* delims=_=" %%a in ('set _') do (
  7. set var=%%a
  8. echo uid={!var:#=-!} %%b条
  9. )
  10. pause>nul
复制代码
心绪平和,眼藏静谧。

TOP

版主大人,经过我反反复复的试验,还是不能执行第二个代码(uid的那个),就是显示

无效数字。数字常数只能是十进制(17),十六位进制(0x11)或
八进制(021)。
环境变量 _ 没有定义

晕死了

TOP

啊!哦。。。。。
连代码都。。。我

TOP

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

TOP

晕了,没招了。改不明白

TOP

测试结果

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

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

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

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

再次请教版主,我本想修改你给的代码再执行类似的去重,"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

谢谢版主和巡查!:D

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

  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

返回列表