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
bash 统计在线时长最长的十个玩/统计一天内一直处于不活跃状态的玩家的百分比的更多相关文章
- js用img代替ajax js心跳 向服务器定时传送参数 主要计算用户在线时长
html: <!doctype html><html><head><meta charset="utf-8"><title&g ...
- js计算在线时长
后台传来毫秒,前台转换成对应的时分秒 //在线时长 function longTime(seconds){ //总秒数 //seconds=seconds/1000; //得到小时 var hour ...
- java web 程序---在线时长
思路:toLocalString()这个方法 <body> <% long t=session.getLastAccessedTime(); long t2=session.getC ...
- 分享一个基于长连接+长轮询+原生的JS及AJAX实现的多人在线即时交流聊天室
实现网页版的在线聊天室的方法有很多,在没有来到HTML5之前,常见的有:定时轮询.长连接+长轮询.基于第三方插件(如FLASH的Socket),而如果是HTML5,则比较简单,可以直接使用WebSoc ...
- spa(单页应用)中,使用history模式时,微信长按识别二维码在ios下失效的问题
spa(单页应用,vue)中,使用history模式时,微信长按识别二维码在ios下失效的问题. 触发条件: spa单页应用: 路由模式 history 从其他页面跳转到带有微信二维码识别的页面(不是 ...
- 用POI导出excel时,较长的数字不想被自动变为科学计数法的解决方式(转)
做过很多次导出excel了.都碰到一个问题,内容里如果包含一个比较长的数字,比如订单号“2546541656596”,excel会自动变成科学计数法... 弄过好几次都没有解决,最近又要导出excel ...
- 设在起始地址为STRING的存储空间存放了一个字符串(该串已存放在内存中,无需输入,且串长不超过99),统计字符串中字符“A”的个数,并将结果显示在屏幕上。
问题 设在起始地址为STRING的存储空间存放了一个字符串(该串已存放在内存中,无需输入,且串长不超过99),统计字符串中字符"A"的个数,并将结果显示在屏幕上. 代码 data ...
- 使用 Redis 统计在线用户人数
在构建应用的时候, 我们经常需要对用户的一举一动进行记录, 而其中一个比较重要的操作, 就是对在线的用户进行记录. 本文将介绍四种使用 Redis 对在线用户进行记录的方案, 这些方案虽然都可以对在线 ...
- seo标题关键字描述字数限制Title,keywords,description长度最长多长 ?
seo标题关键字描述字数限制 seo优化各个搜索引擎收录Title,keywords,description长度最长多长 ?SEO网站优化中Title标签的作用为重中之重,好的Title也就成功了一半 ...
随机推荐
- ASPCTJ
ublic interface ISomeService { public void doSome(); public String dade(); } public class SomeServic ...
- Java集合框架—Set
集合框架 Set的特点:无序,不可以重复元素. (1)HashSet:数据结构是哈希表.线程是非同步的. 保证元素唯一性的原理:判断元素的hashCode值是否相同. ...
- 【转】Java Cipher类 DES算法(加密与解密)
Java Cipher类 DES算法(加密与解密) 1.加密解密类 import java.security.*; import javax.crypto.*; import java.io.*; / ...
- mysqldatadir 转移
当mysql data路径与原始目录不一致时 ,请在mysql 安装目录下my-default.ini 进行设置,取消对应#注释的地址,设置新地址,保存,重新启动,即可. 从网上各种搜索啊,各种尝试, ...
- 备份和导入Outlook 2016 电子邮件签名
在本文中,我将分享您在Outlook 2013和Outlook 2016中备份或导入签名的过程 在清除Outlook配置文件之前,请确保您通过在文件资源管理器中的配置文件中的APPDATA文件夹中复制 ...
- 【TensorFlow入门完全指南】神经网络篇·卷积神经网络
加载数据集. 这里的keep_prob是dropout的一个参数.dropout是一种随机置零的策略,用来防止模型过拟合. 这里定义两层,上面是卷积层,下面是池化层. 搭建了一层卷积.一层池化.一层卷 ...
- 到底什么样的ABAP系统能运行Fiori应用
有朋友在微信上问我两个问题: S/4 fiori是标配吗? 如果是ERP R/3,可以激活fiori配置吗? 先回答第二个问题. 在Jerry的微信公众号文章SAP Fiori应用的三种部署方式曾经提 ...
- 用GWT开发的HelloGWT程序
GWT项目可以通过 命令行和Eclipse插件两种方法创建.创建GWT项目的命令是webAppCreator,具体使用方法可以看GWT的开发文档. Eclipse插件安装完成后,Eclipse的工具条 ...
- GWT module 'xxx' may need to be (re)compiled解决办法
使用GWT Eclipse Plug-in开发GWT应用,启动程序,在浏览器地址栏中输入http://127.0.0.1:8888/HelloWorld.html,没有出现我所期望的结果,而是弹出如下 ...
- python_89_configparser模块
用于生成和修改常见配置文档,当前模块的名称在 python 3.x 版本中变更为 configparser.在python2.x版本中为ConfigPsresr 来看一个好多软件的常见文档格式如下 [ ...