为了统计API的访问,需要读取8个G的数据,所以学习了下文本处理神器,AWK。简单实例如下:

# 以\t分割的文本

awk -F "\t" '
//获取小时的函数
function getHours(times){
split (times, t, ":");
return t[];
}
//awk 可分为三个部分:
//中间部分 {} ,表示对每行的处理,
//BEGIN 表示每行处理之前的预处理,
//END 表示逐行处理之后的最终处理
// 三个部门并不需要同时存在,但中间逐行处理肯定是需要的。

BEGIN{
tilte_cnt = ;
}
{
// $1 表示,每行按照\t分割后,获取的第一个字串
h = int(getHours($)); flag = ;
// 中间可以有for循环,数组等。
// 二维数组可以用 a[xx,xx]表示,实现是通过建立xx,xx的哈希实现的,并不是真正的二维数组
for(i = ; i < title_cnt; i ++){
if (title[i] == $){
tmp[h,i] += ;
flag = ;
break;
}
} if ( == flag){
title[title_cnt] = $;
for (i = ; i < ; i++)
{
tmp[i,title_cnt] = ;
}
tmp[h,title_cnt] = ;
++title_cnt;
}
}END{
iter = ;
// 有很多类C函数
printf("%s,", "api");
for (i = ; i < ;i++){
printf("%d,", i);
}
printf("\n");
for (i = ; i < title_cnt; i++){
printf("%s,", title[i]);
for (j = ; j < ; j++){
printf("%d,", tmp[j,i]);
}
printf("\n");
}
}
' api_log.res > api.analysis
# 重定向到api.analysis 中

最新文章

  1. Android Notification 详解——基本操作
  2. [BZOJ3729]Gty的游戏
  3. nfs部署和优化
  4. Android之mtk上传log
  5. J2EE应用监控后台执行SQL
  6. 第三章 EnumUtil根据值获取枚举对象
  7. ucenter 整合外部网站,实现登录等操作
  8. node.js JS对象和JSON字符串之间的转换
  9. java通过ftp和sftp上传war包上传到Linux服务器实现自动重启tomcat的脚本代码
  10. KMP串匹配算法解析与优化
  11. 9、NFC技术:NDEF文本格式解析
  12. Android 使用库项目时的一个特殊tip
  13. Node.js权威指南 (3) - Node.js基础知识
  14. int *p[4]与int (*q)[4]的区别
  15. 求m和n的最大公约数和最小公倍数
  16. 面试题收集---grep和find的区别
  17. 从“思考”的角度来看如何成为一名优质的Java架构师
  18. 前端自动化测试神器-Katalon进阶用法
  19. 数组查找算法的C语言 实现-----线性查找和二分查找
  20. ueditor编辑器多图上传为什么顺序打乱了

热门文章

  1. 线程(Thread)的四种停止方式
  2. php+apache 环境配置(window环境)
  3. 1..Net平台的背景
  4. 《即时消息技术剖析与实战》学习笔记12——IM系统如何提升图片、音视频消息发送、浏览的体验
  5. oracle12c数据库第一周小测验
  6. 吃透这份pdf,面试阿里、腾讯、百度等一线大厂,顺利拿下心仪offer!
  7. SpringBoot2整合Shiro报错 UnavailableSecurityManagerException: No SecurityManager accessible to the calling code 【已解决】
  8. vue--基础应用 全选
  9. Java 基础(六):循环
  10. Spring扩展:替换IOC容器中的Bean组件 -- @Replace注解