如何从日志中提取这样的信息?

回复 收藏
本帖最后由 定海偶然 于 2015-7-1 17:49 编辑

202.69.15.84   30/Jun/2015:00:00:07 +0800     POST /androidplus/?c=plug3&a=request HTTP/1.1        operator=41006&uid=297683399&IMEI=351653062255568&IMSI=410060528425495&counrty=US&language=en&sdcard=true&screenType=480*800*1.5*240&vercode=52&androidVersion=15&androidId=239ee2129ff85ef4&appvercode=2&appPackname=com.playgame.good.tankwars3D&macAddr=08%3AFD%3A0E%3A3C%3AF9%3A84&uuid=00000000-1490-1f98-d1ca-80cc50b0518d&channelId=0000001&gameId=262&cpId=001&promoterId=011&netgame=false&accessTime=-5   Apache-HttpClient/Android
39.177.39.14   30/Jun/2015:00:00:07 +0800     POST /androidplus/?c=plug3&a=request HTTP/1.1        channelId=0000002&gameId=228&cpId=001&promoterId=011&netgame=false&uid=325903320&operator=46002&IMEI=352419060514474&IMSI=460022079437457&counrty=CN&language=zh&sdcard=true&androidVersion=19&vercode=112&uuid=00000000-689c-02ed-b229-55977dbfca2e&androidId=a9a702cb48cdd838&appvercode=4&appvername=1.0.3&appPackname=com.joym.happybubble.lt&macAddr=14%3AB4%3A84%3A6D%3A6B%3A39&accounts=&accessTime=-5   Apache-HttpClient/Android

以上是日志中的2段,要求提取出红色字体哦!
注意,该日志文件大小为50G,

该怎么写?

2015-07-01 12:16 举报
已邀请:
0

aqi

赞同来自:

awk '{ip=$1;sub(/.*&IMEI=/,"IMEI=",$0);sub(/&IMSI=.*/,"",$0);print ip,$0 >> "result.txt"}' file
50g 可能需要几十分钟
0

定海偶然

赞同来自:

本帖最后由 定海偶然 于 2015-7-1 17:58 编辑
aqi 发表于 2015-7-1 13:14
awk '{ip=$1;sub(/.*&IMEI=/,"IMEI=",$0);sub(/&IMSI=.*/,"",$0);print ip,$0 >> "result.txt"}' file
50g ...

牛牛!! 时间这么长,不会宕机吧,8G内存!
我记得,awk后面在加上排序,去重,那铁定会宕机{:4_107:}



但是执行的结果,并不是太好!日志文档我取了50行

0

aqi

赞同来自:

定海偶然 发表于 2015-7-1 13:37
牛牛!! 时间这么长,不会宕机吧,8G内存!
我记得,awk后面在加上排序,去重,那铁定会宕机
...

排序不清楚  单独运行这个应该是不耗内存的  输出后的内容应该只有几个g吧  可以再做后续的过滤
0

定海偶然

赞同来自:

本帖最后由 定海偶然 于 2015-7-1 14:24 编辑
aqi 发表于 2015-7-1 14:21
排序不清楚  单独运行这个应该是不耗内存的  输出后的内容应该只有几个g吧  可以再做后续的过滤

我截取了50行,做了下实验,发现,有的行信息出来的不是IMEL

结果应该像这样的形式
0

aqi

赞同来自:

定海偶然 发表于 2015-7-1 13:37
牛牛!! 时间这么长,不会宕机吧,8G内存!
我记得,awk后面在加上排序,去重,那铁定会宕机
...

结果不理想 是因为你之前给的例子不完全  有些行里没有IMEI=  这个字段   不知道你需要如何过滤 没有这个字段的行?
0

定海偶然

赞同来自:

aqi 发表于 2015-7-1 14:27
结果不理想 是因为你之前给的例子不完全  有些行里没有IMEI=  这个字段   不知道你需要如何过滤 没有这个 ...

那一行没有IMEL的话,就只提取IP
0

aqi

赞同来自:

定海偶然 发表于 2015-7-1 14:28
那一行没有IMEL的话,就只提取IP

awk '{if($0!~/&IMEI=/){print $1 >>"result.txt";next}ip=$1;sub(/.*&IMEI=/,"IMEI=",$0);sub(/&IMSI=.*/,"",$0);print ip,$0 >> "result.txt"}' file
0

定海偶然

赞同来自:

aqi 发表于 2015-7-1 14:31
awk '{if($0!~/&IMEI=/){print $1 >>"result.txt";next}ip=$1;sub(/.*&IMEI=/,"IMEI=",$0);sub(/&IMSI=.* ...

大神,请收下我的膝盖!!!{:4_116:}
0

aqi

赞同来自:

定海偶然 发表于 2015-7-1 14:36
大神,请收下我的膝盖!!!

{:4_116:}
0

定海偶然

赞同来自:

aqi 发表于 2015-7-1 14:31
awk '{if($0!~/&IMEI=/){print $1 >>"result.txt";next}ip=$1;sub(/.*&IMEI=/,"IMEI=",$0);sub(/&IMSI=.* ...

唉,人家的awk,好牛逼啊,真羡慕~我啥时也能这么厉害呢!
0

aqi

赞同来自:

本帖最后由 aqi 于 2015-7-1 18:41 编辑

awk '{if($0~/&IMEI=.*&gameId=/){ip=$1;line=$0;sub(/.*gameId=/,"",line);sub(/&cpId=.*/,"",line);if(line<42){sub(/.*&IMEI=/,"IMEI=",$0);sub(/&IMSI=.*/,"",$0);print ip,$0,line >> "result.txt"}}}' file
0

定海偶然

赞同来自:

aqi 发表于 2015-7-1 18:36
awk '{if($0~/&IMEI=.*&gameId=/){ip=$1;line=$0;sub(/.*gameId=/,"",line);sub(/&cpId=.*/,"",line);if(li ...

标记一下:这行命令是提取
gameid<=42的IP和IMEI

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: