使用awk 统计分析游戏后台日志中的数据
来源:互联网 发布:移动网络和机顶盒办理 编辑:程序博客网 时间:2024/06/07 10:44
awk是Unix/Linux环境下一种非常好的语言,适合于文本处理和报表生成,它还有许多精心设计的特性,允许进行特殊技巧程序设计。对于从游戏日志中抽取一些特定的信息,使用awk就非常方便。鉴于在测试工作中awk命令的重要性,因此仅以本文作一个提纲挈领的介绍,希望对初学者迅速掌握awk有所帮助。
一、awk基础语法
假设一个游戏日志名为dayreport.log,内容如下:
2014-07-23 00:03:05##attribute#41#天地#256#+#copper#2304000#173
2014-07-23 00:04:02##attribute#800#飞将军#242#+#tickets#5000#18
在命令行中输入以下命令:
$ awk '{ print $0}' dayreport.log
执行后dayreport.log文件的内容显示在屏幕上:
2014-07-23 00:03:05##attribute#41#天地#256#+#copper#2304000#173
2014-07-23 00:04:02##attribute#800#飞将军#242#+#tickets#5000#18
编写并且执行awk程序的方法很简单,如上所示,花括号内的是程序代码,后面的dayreport.log为指定的输入文件。
awk程序的基本组成为:awk ‘ BEGIN{code1} {code2} END {code3} ‘ filename
awk是一种行处理程序,执行awk时,先执行begin后面的code1代码初始化一些数据,然后依次对输入文件中的每一行执行code2代码,直到执行完所有文件行,最后执行END之后的code3。
二、分割域
要能在工作中使用awk,首先要懂得awk命令分割域的功能。即$number变量。
使用$number变量,可以将一条记录划分成多个独立的字段,例如:
$ awk –F ’#’ ‘{ print $4,$5}’ dayreport.log
输出结果为:
41天地
800飞将军
上例中,在调用awk时,使用-F选项来指定"#"作为字段分隔符。awk处理分割域之后,打印出第4和第5个域的内容,即玩家ID和玩家名字段。
三、游戏日志统计
在QA的日常工作中,游戏日志统计是一项较为普遍的工作。日志统计通常使用grep + awk的命令组合,方法如下:
1、使用grep检索出需要进行统计的所在行;
2、使用awk的行处理和分割域功能,分析统计grep检索出的数据。
下面举例介绍一下较为常用的“统计每个玩家游戏次数”和“统计每个玩家收益总数”两种方法。
四、统计次数
下面是一个例子,需求是统计每个玩家在超级翻牌活动中购买的游戏次数
在游戏日志中dayreport_name.log中,找到购买超级翻牌活动次数的日志是这样打印的:
2015-05-14 00:42:10##attribute#3467#英雄大名#282#-#sgold#3#超级翻牌购买次数
1、通过grep检索出每个玩家购买超级翻牌活动的日志:
grep –E ‘2015-05-14.*#\-#sgold#.*超级翻牌购买次数$’ dayreport_name.log
得到如下结果:
2015-05-14 00:00:59##attribute#12445#Loser#270#-#sgold#1#超级翻牌购买次数
2015-05-14 00:01:00##attribute#12445#Loser#270#-#sgold#2#超级翻牌购买次数
2015-05-14 00:05:46##attribute#1991#卡布#292#-#sgold#0#超级翻牌购买次数
2015-05-14 00:05:51##attribute#1991#卡布#292#-#sgold#0#超级翻牌购买次数
2015-05-14 00:08:22##attribute#1991#卡布#292#-#sgold#0#超级翻牌购买次数
2015-05-14 00:08:23##attribute#1991#卡布#292#-#sgold#0#超级翻牌购买次数
2015-05-14 00:41:54##attribute#3467#英雄大名#282#-#sgold#1#超级翻牌购买次数
2015-05-14 00:42:02##attribute#3467#英雄大名#282#-#sgold#2#超级翻牌购买次数
2015-05-140:42:10##attribute#3467#英雄大名#282#-#sgold#3#超级翻牌购买次数
2、使用awk命令对结果进行分析,统计每个玩家购买的次数
grep –E ‘2015-05-14.*#\-#sgold#.*超级翻牌购买次数$’ dayreport_name.log |
awk –F ‘#’ ‘{count[$4]++}END{for ( i in count) {print count[i]”#” i}}’
分析后得到如下结果,表示为购买次数和player_id:
2#12445
4#1991
3#3467
命令行解析:
1、grep –E命令,即egrep,是支持正则表达式的grep,在本例中可以不使用-E指令,但如果要匹配时间的正则表达式搜索,则需要使用grep –E
2、grep ‘超级翻牌购买次数$’ 表示检索以“超级翻牌购买次数”结尾的行
3、count[$4]++ 是一个自定义的数组,只不过其下标是player_id。awk对每一行执行一次count[$4]++这一句代码,遇到一个新的player_id,则count数组中就会多一个成员并自增1
4、awk执行完grep的结果之后,每个玩家的次数统计在count数组中。之后执行END操作,for循环遍历count数组,打印出对应的购买次数和player_id
五、统计总数
下面是另一个例子,需求是统计每个玩家在某一天消耗的系统金币总和
在游戏日志中dayreport_name.log中,找到消耗用户金币的日志是这样打印的:
2015-05-14 00:06:10##attribute#8194#李彩儿#288#-#ugold#20#超级翻牌金币全开
2015-05-14 00:10:11##attribute#8194#李彩儿#288#-#ugold#5#拜神购买次数
1、首先通过grep检索出当天所有玩家消耗用户金币的日志:
grep –E ‘2015-05-14.* #attribute#.*#\-#ugold#’ dayreport_name.log
得到如下结果:
2015-05-14 00:05:17##attribute#1991#卡布#292#-#ugold#20#超级翻牌金币全开
2015-05-14 00:05:46##attribute#1991#卡布#292#-#ugold#1#超级翻牌购买次数2015-05-14 00:05:53##attribute#1991#卡布#292#-#ugold#20#超级翻牌金币全开
2015-05-14 00:10:08##attribute#8194#李彩儿#288#-#ugold#5#拜神购买次数
2015-05-14 00:10:09##attribute#8194#李彩儿#288#-#ugold#5#拜神购买次数
2015-05-14 05:08:33##attribute#9105#BMW#292#-#ugold#5#拜神购买次数
2015-05-14 05:08:33##attribute#9105#BMW#292#-#ugold#5#拜神购买次数
2015-05-14 05:08:47##attribute#9105#BMW#292#-#ugold#10#拜神中级祭祀
2015-05-14 05:08:52##attribute#9105#BMW#292#-#ugold#10#拜神中级祭祀
2、使用awk命令对结果进行分析,统计每个玩家消费金币总额
grep –E ‘2015-05-14.* #attribute#.*#\-#ugold#’ dayreport_name.log |
awk –F ‘#’ ‘{sum[$4]+=$9}END{for ( i in sum) {print sum[i]”#” i}}’
分析后得到如下结果,表示为消费用户金币总数和player_id:
41#1991
10#8194
30#9105
命令行解析:
1、通过awk的分割域,$4是player_id,$9是消费的金币数量。
2、sum[$4]与上一个例子中的count[$4]相同,是一个自定义的数组,下标是player_id。 awk对每一行执行一次sum[$4]+=$9这一句代码
3、awk执行完grep的结果之后,每个玩家的次数统计在sum数组中。之后执行END操作,for循环遍历sum数组,打印出对应的金币消费总数和player_id
- 使用awk 统计分析游戏后台日志中的数据
- 常用统计分析 SQL 在 AWK 中的实现
- 游戏BI数据统计分析相关
- 另外开发者可以进行后台数据统计分析工作
- 如何正确的使用百度统计分析数据
- awk 二维数据使用
- 网站数据统计分析之一:日志收集原理及其实现
- 网站数据统计分析之一:日志收集原理及其实现
- 网站数据统计分析之一:日志收集原理及其实现
- AWK分析access日志中的应用
- 游戏数据 后台管理网站
- 统计分析apache服务器日志
- Nignx日志统计分析
- iOS crash 日志统计分析
- tomcat 日志统计分析
- ,日志各地区访问量统计分析
- R语言 | 数据挖掘中的常用统计分析知识
- 使用awk做数据统计
- 有关Tomcat 8.0版本文件上传后无权限访问的问题
- 运行.exe,并自动关闭.exe
- Android开发者e周报 第4期
- HAWQ适应场景总结
- <java>基本数据类型
- 使用awk 统计分析游戏后台日志中的数据
- 用两个栈来实现队列
- Binding
- ORA-00923: FROM keyword not found where expected
- 第一个helloworld内核模块
- 【Kafka】Producer配置
- 经验分享 | 在将容器扩大化应用于生产环境中_你都遭遇了哪些困境?
- 设计模式的应用场景(9)--装饰模式
- 前端H5初学笔记(一)