最近在公司看到我经理在gitlab上面发了一些关于游戏数据的检索。主要是使用shell来检索出某个时间点,用户的访问量。
脚本如下
tail -12000000 paigu-assess.log | grep user | grep " 200 "| cut -d' ' -f4 | uniq -c | sort -r | head -10
分为多个管道进行处理
- 获得
paigu-assess.log
的最后12000000条数据,其实也可以写好点tail -n 12000000
这样可读性比较高。 - 把从
1
中得到的结果由管道的方式传给grep,这里是对上面检索到的数据,进行匹配,匹配其中包含user
关键字的记录。 - 从
2
中搜索到的记录中筛选状态码为200的请求(请求成功的记录) -
cut -d' '
删除记录中的空格并返回一个列表,接着参数
-f4
获取第四个字段
- 这里需要详细说明一下,如果记录内容为
ruby on rails good map
则最后获得的的结果为good
-
uniq
表示对4
中的记录进行汇总,(每条记录的唯一性),-c汇总后显示每条唯一记录的出现次数。(很不错的汇总工具,可惜MacOS并没有带这个工具。)- 比如我们的结果如下
ruby ruby python
- 则最后的显示结果为
2 ruby
1 python
- 对结果进行排序,由大到小。
- 从头获取前10条数据。
总的来说,这个脚本用来获取,最后12000000条访问记录中,用户访问成功的记录汇总,(其实里面每条记录还会有个时间点以秒算的,
4
中获得的字段其实就是时间),其实就是那个时间点的用户成功访问的记录数汇总。取其中访问量最高的10条记录。这是业务的事情看不懂也没关系,(毕竟是小弟的公司嘛)关键是对上面个命令的拆分。祝各位 Happy Coding!!。