使用 awk 命令统计文本
复制代码
有那么一段日志,需要统计出来以下信息:
输出耗时超过 1000ms 并且结果是 Y 的整行
12:00 ~ 13:00 之间成功的行数,成功率
日志格式:时间,traceId,类方法名,耗时,结果,内容
看到这里,如果小伙伴已经有思路了,那就没必要往下面看了,直接拉到最后,点赞、在看。
这里要使用的就是 awk 命令。
常用内置变量
awk 的主要功能就是对文本进行统计报告,具体介绍可以看菜鸟笔记,下面仅介绍几个常用的内置变量。
FS:行字段分隔符,默认是空格,可以使用
-F
指定分隔符1……:行字段分隔符分割后获取指定部分,$0 是获取整行记录
NF:当前行的字段数量
RS:行记录分隔符
NR:行号
大概常用的就这几个,下面看一下实际使用效果
效果展示
复制代码
因为 $0 就代表整行记录,所以输出结果如下。

那 $1 的结果呢?

因为默认是空格
作为分隔符,所以输出的结果就只有日期了。
指定分隔符为,
之后,看一下输出结果:

题目答案
基本上熟悉了怎么使用剩下的就比较好办了。
耗时超过 1000ms 且 Y 的行
复制代码

12:00 ~ 13:00 之间成功的行数,成功率
复制代码

总记录 7 条, 12:00 ~ 13:00 之间成功的行数是 2,成功率 0.5。
总结
上面只是在工作中可能会遇到的一个场景,所以记录下来,如果小伙伴有更合适的方式来统计计算,欢迎留言。
版权声明: 本文为 InfoQ 作者【程序员小航】的原创文章。
原文链接:【http://xie.infoq.cn/article/896f82d9a4ebc2f7065116560】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论