2022-04-19 11:25:15.008,b4d13bfca8fe4b93a85e65a88520d945,LogScheduler#printLog,10ms,Y,xxxxxxxx
2022-04-19 12:01:15.002,4d10d093dce8491c8ae3c1bff6dbd7c5,LogScheduler#printLog,999ms,N,xxxxxxxx
2022-04-19 12:12:16.003,d9d1f4b121764edb8cb260417cd75229,LogScheduler#printLog,5ms,Y,xxxxxxxx
2022-04-19 12:15:22.004,e3e10340e51c49ce9d688541ba799283,LogScheduler#printLog,1001ms,N,xxxxxxxx
2022-04-19 12:55:59.005,209d2f1407894da5aa0f44de621515c7,LogScheduler#printLog,1020ms,Y,xxxxxxxx
2022-04-19 13:25:15.006,e09f75c6d0d849068ae713820c94f3f9,LogScheduler#printLog,15ms,Y,xxxxxxxx
2022-04-19 13:25:15.008,b4d13bfca8fe4b93a85e65a885231231,LogScheduler#printLog,99ms,Y,xxxxxxxx

有那么一段日志,需要统计出来以下信息:

  • 输出耗时超过 1000ms 并且结果是 Y 的整行
  • 12:00 ~ 13:00 之间成功的行数,成功率

日志格式:时间,traceId,类方法名,耗时,结果,内容

看到这里,如果小伙伴已经有思路了,那就没必要往下面看了,直接拉到最后,点赞、在看。

这里要使用的就是 awk 命令。

常用内置变量

awk 的主要功能就是对文本进行统计报告,具体介绍可以看菜鸟笔记,下面仅介绍几个常用的内置变量。

  • FS:行字段分隔符,默认是空格,可以使用-F指定分隔符
  • $0、$1……:行字段分隔符分割后获取指定部分,$0 是获取整行记录
  • NF:当前行的字段数量
  • RS:行记录分隔符
  • NR:行号

大概常用的就这几个,下面看一下实际使用效果

效果展示

notes  % > awk '{print $0}' c.log

因为 $0 就代表整行记录,所以输出结果如下。

那 $1 的结果呢?

因为默认是空格作为分隔符,所以输出的结果就只有日期了。

指定分隔符为,之后,看一下输出结果:

题目答案

基本上熟悉了怎么使用剩下的就比较好办了。

  • 耗时超过 1000ms 且 Y 的行
notes  % > awk -F ',' '{split($4,a,"ms"); if(a[1] > 1000 && $5 == "Y") print $0}' c.log

  • 12:00 ~ 13:00 之间成功的行数,成功率
awk -F ',' 'BEGIN{count=0;sum=0}{if($1>="2022-04-19 12:00:00.000" && $1<"2022-04-19 13:00:00.000"){sum+=1;if($5 == "Y")count+=1}}END{print NR,count,sum,count/sum}' c.log

总记录 7 条, 12:00 ~ 13:00 之间成功的行数是 2,成功率 0.5。

总结

上面只是在工作中可能会遇到的一个场景,所以记录下来,如果小伙伴有更合适的方式来统计计算,欢迎留言。

最新文章

  1. asp.net中membership使用oracle数据库(二)
  2. TP框架常用配置
  3. Activity之间传递参数(一)
  4. 【读书笔记】iOS网络-应用间通信
  5. Web前端学习笔记1
  6. 【转】用capability 特征加强Linux系统安全
  7. hdoj 2031 进制转换
  8. Vue2.0环境搭建和测试demo
  9. One Card Poker
  10. 单向链表在O(1)时间内删除一个节点
  11. Element-ui使用技巧
  12. MySQL报错: SQLSTATE[HY000]: General error: 1030 Got error 28 from storage engine
  13. 最长(大)回文串的查找(字符串中找出最长的回文串)PHP实现
  14. vue自定义插件-弹框
  15. git push 报错:missing Change-Id in commit message footer
  16. 定时调度任务quartz
  17. Python基础:内置函数
  18. 动易CMS漏洞收集
  19. Android-自定义仿QQ列表Item滑动
  20. Dart 语言了解

热门文章

  1. 【Android开发】安卓炫酷效果集合
  2. Vue UI 可视化项目管理界面
  3. 关于#pragma 和 _pragma
  4. Vue整合Quill富文本编辑器
  5. Intellij IDEA中查看字节码
  6. [UE][虚幻]创建默认媒体打包资源路径
  7. Django + Taro 前后端分离项目实现企业微信登录
  8. show binary logs
  9. 32位x86处理器架构
  10. Hyperledger Fabric定制联盟链网络工程实践