bash 统计在线时长最长的十个玩/统计一天内一直处于不活跃状态的玩家的百分比

1、某游戏的客户端每隔5分钟会向服务端报告一次玩家的账户积分,如果两次报告的时间间隔不大于5分钟,认为该玩家在这5分钟内在线,假设报告数据的格式如下:

IP                   Datetime                Score

223.152.112.238      2014-08-22 12:01:35     54232

现有一天的数据,按时间按序保存,粗略估计玩家数在百万左右,请使用尽量少的硬件资源完成以下请求,统计在线时长最长的十个玩家;如果玩家两次提交的积分相同,认为玩家在5min的在线时间内不活跃,请统计一天内一直处于不活跃状态的玩家的百分比。

game_user_calculate.bash文件代码如下:

#!/bin/bash

#先统计有多少个用户,即有多少个ip
sed ‘1d‘ log_all > log_all_1
awk ‘{ip[$1]++}END{for(i in ip){print i, ip[i]}}‘ log_all_1 > user
awk ‘{ip[$1]++}END{for(i in ip){print i}}‘ log_all_1 > user
user_count=`cat user | wc -l`

#把每个用户的记录提取出来
for((i=1;i<=$user_count;i++));
do
	#逐一取出各个ip
	one_user=`sed -n "$i"p user`

	#根据ip筛选出属于此ip的报告记录,并统计报告次数
	list_count=`grep "$one_user" log_all_1 | wc -l`

	#根据ip筛选出属于此ip的报告记录,并从第四列分数中统计出不同分数的个数
	score_count=`grep "$one_user" log_all_1 | awk ‘{print $4}‘ | sort -u | wc -l`

	#将每个用户的报告总次数写入行首
	sed -i "$i{s/^/ $list_count /}" user

	#将每个用户的不同分数的个数,写入行尾
	sed -i "$i{s/$/ $score_count /}" user
done

#把有记录报告次数和用户IP的文件及不同分数的文件user, 按记录次数由大到小排序,且取ip字段,并输出前十个
echo "The first 10 users online are"
sort -n -r -k 1 user | awk ‘{print $2}‘ | sed -n ‘1,10p‘ | cat -n

#-n是以数值来排序
#-r是降序排列,默认是升序
#-k指定列数

#统计一天内一直处于不活跃状态的玩家总数,
nowake=`awk ‘{print $3}‘ user | grep "1" | wc -l`

#计算不活跃状态玩家的百分比
echo Percentage of no active users is: `awk ‘BEGIN{printf "%.2f%\n",(‘$nowake‘/‘$user_count‘)*100}‘`

log文件如下:

IP                   Datetime                Score
223.152.112.238      2014-08-22 12:01:35     54232
223.152.112.238      2014-08-22 12:06:35     54232
223.152.112.238      2014-08-22 12:11:35     54232
223.152.112.238      2014-08-22 12:17:35     54232
223.152.112.236      2014-08-22 12:01:35     54232
223.152.112.236      2014-08-22 12:06:35     54231
223.152.112.236      2014-08-22 12:15:35     54232
223.152.112.237      2014-08-22 12:01:35     54232
223.152.112.237      2014-08-22 12:06:35     54232
223.152.112.237      2014-08-22 12:11:35     5420
223.152.112.237      2014-08-22 12:16:35     54232
223.152.112.237      2014-08-22 12:29:35     54232
223.152.112.237      2014-08-22 12:34:35     54232

时间: 2024-10-23 23:39:44

bash 统计在线时长最长的十个玩/统计一天内一直处于不活跃状态的玩家的百分比的相关文章

scala实战之spark用户在线时长和登录次数统计实例

接触spark后就开始学习scala语言了,因为有一点python和java的基础学习起来还行,今天在这里把我工作中应用scala编程统计分析用户行为日志的实例和大家分析一下,我这里主要讲一下用户的在线时长统计和登录次数统计算法实现过程. 第一步 编程环境:首先你得有spark安装包 你可以先不用本地安装spark,但是可以通过import spark-assembly-1.6.2-hadoop2.6.0.jar包来完成程序调试 另外需要scala的运行环境,我用的版本:scala-sdk-2.

js用img代替ajax js心跳 向服务器定时传送参数 主要计算用户在线时长

html: <!doctype html><html><head><meta charset="utf-8"><title>记录用户的在线时长</title></head> <body></body></html><script type="text/javascript"> var Statistics_Website_logo ={

在线时长缓存

/**     * @desc 在线时长缓存     * @var string     * @access public     */    const KEY_ONLINE_CACHE = 'hd:online:cache';        /**     * @desc 插入  hd_online_data表     * @access public     * @param array $data 数据     * @return boolean     */    public fun

java web 程序---在线时长

思路:toLocalString()这个方法 ? 1 2 3 4 5 6 7 8 9 10 11 <body>     <%         long t=session.getLastAccessedTime();         long t2=session.getCreationTime();      %>           <h1>会话最近访问时间:<%=new Date(t).toLocaleString() %></h1>   

Python Show-Me-the-Code 第 0020题 统计通话时长

第 0020 题: 登陆中国联通网上营业厅 后选择「自助服务」 –> 「详单查询」,然后选择你要查询的时间段,点击「查询」按钮,查询结果页面的最下方,点击「导出」,就会生成类似于 2014年10月01日-2014年10月31日通话详单.xls 文件.写代码,对每月通话时间做个统计. 思路: 我的手机号是移动的,所以我选的是导出移动手机号某月的详单.打开表格文件发现每行的格式是: 序号 通话地 通话类型 对方号码 开始时间 通话时长 移动话费 长途话费 它的通话类型是包括套餐,主叫,被叫,上网流量

(二)仅仅通过Application监听用户行为及App的在线状态和在线时长

先要实现功能,还是先从API去找.看看有没有你想要的.这里其实就是监听App内activity的状态.怎么办? 给个API所在地址:http://www.android-doc.com/reference/android/app/Application.html 看到没?这里有个方法registerActivityLifecycleCallbacks ,这不是监听吗?看看回调了啥东西,点进去再看看. 我去,这服务不要太好呀.要啥有啥.看到没?所有activity的生命周期都能获取到.所以.怎么用

用POI导出excel时,较长的数字不想被自动变为科学计数法的解决方式(转)

做过很多次导出excel了.都碰到一个问题,内容里如果包含一个比较长的数字,比如订单号“2546541656596”,excel会自动变成科学计数法... 弄过好几次都没有解决,最近又要导出excel了,下决心一定要找到解决办法 自己在excel里测试过,较长的数字,都会自动变成科学计数法,除非我们把单元格格式设置成“文本型” 哈哈,似乎找到了思路:用poi先把单元格设置成“文本型”就可以了把. 从文档里找到了这个方法HSSFCell.setCellType(int type),怎么看这个方法都

统计语句中的最长最短单词

已知 string sentence="We were her pride of 10 she named us: Benjamin, Phoenix, the Pordigal and perspicacious pacific Suzanne.";编写程序,计算sentence中有多少个单次,并指出其中最长和最短的单词,如果有多个,则将它们全部输出 使用find_first_of 和find_first_not_of,寻找到单词的起始位置: 使用vector存放最长和最短单词:通过

spa(单页应用)中,使用history模式时,微信长按识别二维码在ios下失效的问题

spa(单页应用,vue)中,使用history模式时,微信长按识别二维码在ios下失效的问题. 触发条件: spa单页应用: 路由模式 history 从其他页面跳转到带有微信二维码识别的页面(不是直接打开该页面) ios版本的微信(实测版本6.5.19) 结果: 二维码长按无法识别,刷新页面后恢复正常,安卓下正常. 解决方案: 1. 进入该页面的方式不使用路由跳转,而改为 <a href="xxx">目标二维码页面</a>的方式: 2. 在beforeCre