标题: [文本处理] 求助!!log文件中数据去重统计问题 [打印本页]
作者: 低手进阶 时间: 2008-9-2 14:28 标题: 求助!!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这个字符串的信息的条数。
作者: pusofalse 时间: 2008-9-2 15:01
- @echo off
- for /f "delims=" %%a in ('findstr/n "\<ecs\>" logfile.log') do echo %%a&set/a n+=1
- echo %n%条信息。
- pause
复制代码
作者: 低手进阶 时间: 2008-9-2 15:14
非常感谢您给我回帖!
俺想弱弱的问一下,这个批处理执行结果就是告诉我一共有多少条日志信息,我想要的是
ecs=3.8.8.1 10条
ecs=3.8.8.2 15条
。
。
。
这种形式。是我没表述清楚!
作者: pusofalse 时间: 2008-9-2 15:21
最好把你的LOG文件贴上来,如果过大,贴一部分好了。
作者: 低手进阶 时间: 2008-9-2 15:31
- * - - [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 "-" "*"
- *- - [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 "-" "*"
- *- - [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 "-" "*"
- *- - [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 "-" "*"
- *- - [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 "-" "*"
- *- - [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 "-" "*"
- *- - [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 编辑 ]
作者: Batcher 时间: 2008-9-2 15:41
- @echo off
- for /f "tokens=3 delims=&" %%a in ('findstr /i "ecs=" "a.log"') do (
- for /f "tokens=2 delims==" %%b in ("%%a") do (
- if not defined ecs%%b (
- set ecs%%b=1
- ) else (
- set /a ecs%%b+=1
- )
- )
- )
- for /f "tokens=1-2 delims==" %%a in ('set ecs') do (
- echo %%a %%b条
- )
复制代码
作者: pusofalse 时间: 2008-9-2 15:45
- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=6 delims==&" %%a in ('findstr "\<ecs\>" l.log') do set "var=%%a"&set/a _!var!+=1
- for /f "tokens=1,2 delims=_=" %%a in ('set _') do echo ecs=%%a %%b条
- pause>nul
复制代码
作者: 低手进阶 时间: 2008-9-2 15:53
谢谢版主和巡查!:D
作者: 低手进阶 时间: 2008-9-2 16:31
再次请教版主,我本想修改你给的代码再执行类似的去重,"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就可以了?
作者: Batcher 时间: 2008-9-2 16:38 标题: 回复 9楼 的帖子
你应该先自己试试修改一下tokens行不行,不行再提问。
作者: 低手进阶 时间: 2008-9-2 16:44
汗,我修改的错误百出!我刚刚才接触批处理,有点。。。。
谢谢指教
作者: pusofalse 时间: 2008-9-2 16:53
- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=2 delims={}" %%a in ('findstr/i "\<uid\>" l.log') do set "var=%%a"&set/a _!var!+=1
- for /f "tokens=1,* delims=_=" %%a in ('set _') do echo uid={%%a} %%b条
- pause>nul
复制代码
作者: 低手进阶 时间: 2008-9-2 17:14 标题: 测试结果
无效数字。数字常数只能是十进制(17),十六位进制(0x11)或
八进制(021)。
。。。。。。
无效数字。数字常数只能是十进制(17),十六位进制(0x11)或
八进制(021)。
环境变量 _ 没有定义
十分感谢版主回复,原来不只是改tokens啊
作者: 低手进阶 时间: 2008-9-2 18:05
晕了,没招了。改不明白
作者: pusofalse 时间: 2008-9-2 18:13
我这里测试没问题。
作者: 低手进阶 时间: 2008-9-2 18:25
啊!哦。。。。。
连代码都。。。我
作者: 低手进阶 时间: 2008-9-2 18:44
版主大人,经过我反反复复的试验,还是不能执行第二个代码(uid的那个),就是显示
无效数字。数字常数只能是十进制(17),十六位进制(0x11)或
八进制(021)。
环境变量 _ 没有定义
晕死了
作者: pusofalse 时间: 2008-9-2 18:59 标题: 回复 17楼 的帖子
我明白原因了。。。试下这样!- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=2 delims={}" %%a in ('findstr/i "\<uid\>" l.log') do (
- set "var=%%a"
- set/a _!var:-=#!+=1
- )
- for /f "tokens=1,* delims=_=" %%a in ('set _') do (
- set var=%%a
- echo uid={!var:#=-!} %%b条
- )
- pause>nul
复制代码
作者: terse 时间: 2008-9-2 19:48
针对楼主的格式写一个 不通用- @echo off
- for /f "tokens=10-13 delims==*& " %%a in (1.log) do set/a _%%a_%%b+=1&set/a _%%c_%%d+=1
- for /f "tokens=1-3 delims=_=" %%a in ('set _') do echo %%a=%%b %%c 条
- pause>nul
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |