第一个AWK程序的尝试

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

 

# 以\t分割的文本

awk
-F "\t" ' //获取小时的函数 function getHours(times){ split (times, t, ":"); return t[3]; }
//awk 可分为三个部分:
//中间部分 {} ,表示对每行的处理,
//BEGIN 表示每行处理以前的预处理,
//END 表示逐行处理以后的最终处理
// 三个部门并不须要同时存在,但中间逐行处理确定是须要的。
BEGIN{ tilte_cnt
= 0; } {
// $1 表示,每行按照\t分割后,获取的第一个字串
h
= int(getHours($1)); flag = 0; // 中间能够有for循环,数组等。
// 二维数组能够用 a[xx,xx]表示,实现是经过创建xx,xx的哈希实现的,并非真正的二维数组
for(i = 0; i < title_cnt; i ++){ if (title[i] == $2){ tmp[h,i] += 1; flag = 1; break; } } if (0 == flag){ title[title_cnt] = $2; for (i = 0; i < 24; i++) { tmp[i,title_cnt] = 0; } tmp[h,title_cnt] = 1; ++title_cnt; } }END{ iter = 0; // 有不少类C函数
printf(
"%s,", "api");
for (i = 0; i < 24;i++){ printf("%d,", i); } printf("\n"); for (i = 0; i < title_cnt; i++){ printf("%s,", title[i]); for (j = 0; j < 24; j++){ printf("%d,", tmp[j,i]); } printf("\n"); } } ' api_log.res > api.analysis # 重定向到api.analysis 中
相关文章
相关标签/搜索