第一个AWK程序的尝试
2024-10-08 22:04:01
为了统计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 中
最新文章
- Android Notification 详解——基本操作
- [BZOJ3729]Gty的游戏
- nfs部署和优化
- Android之mtk上传log
- J2EE应用监控后台执行SQL
- 第三章 EnumUtil根据值获取枚举对象
- ucenter 整合外部网站,实现登录等操作
- node.js JS对象和JSON字符串之间的转换
- java通过ftp和sftp上传war包上传到Linux服务器实现自动重启tomcat的脚本代码
- KMP串匹配算法解析与优化
- 9、NFC技术:NDEF文本格式解析
- Android 使用库项目时的一个特殊tip
- Node.js权威指南 (3) - Node.js基础知识
- int *p[4]与int (*q)[4]的区别
- 求m和n的最大公约数和最小公倍数
- 面试题收集---grep和find的区别
- 从“思考”的角度来看如何成为一名优质的Java架构师
- 前端自动化测试神器-Katalon进阶用法
- 数组查找算法的C语言 实现-----线性查找和二分查找
- ueditor编辑器多图上传为什么顺序打乱了
热门文章
- 线程(Thread)的四种停止方式
- php+apache 环境配置(window环境)
- 1..Net平台的背景
- 《即时消息技术剖析与实战》学习笔记12——IM系统如何提升图片、音视频消息发送、浏览的体验
- oracle12c数据库第一周小测验
- 吃透这份pdf,面试阿里、腾讯、百度等一线大厂,顺利拿下心仪offer!
- SpringBoot2整合Shiro报错 UnavailableSecurityManagerException: No SecurityManager accessible to the calling code 【已解决】
- vue--基础应用 全选
- Java 基础(六):循环
- Spring扩展:替换IOC容器中的Bean组件 -- @Replace注解