当前位置:首页>Linux>linux下,统计计算的好帮手: awk

linux下,统计计算的好帮手: awk

  • 2026-10-19 14:10:21
linux下,统计计算的好帮手: awk
最近我们计划将服务的日志全量保存下来,方便问题定位以及数据分析,现在需要预估单条日志的大小,但是线上为了防止机器磁盘打满,并没有打印全部,而是只打印前1kb以及日志的长度:
第一个size:是入参的大小。
第二个size:是返回数据的大小。
这样通过这两个size的和,能够大概预估出来日志的大小。
需求拆解
线上日志每天成百上千万,那怎样去批量的统计计算呢?
第一肯定是先想到awk,我们现在需要做:
  • 每条日志,size1+size2,求和。
  • 所有日志的size1、size2,求和。
  • 计算日志条数。
  • 所有size之和除以日志条数。
  • 得到平均值。
核心awk解法
这种需求非常适合awk一行解决:
awk '{  sum_line = 0  for (i = 1; i <= NF; i++) {    if ($i ~ /^size:[0-9]+$/) {      split($i, a, ":")      sum_line += a[2]    }  }  total += sum_line  count++}END {  print "total_size =", total  print "line_count =", count  print "avg =", total / count}' server.log
下面逐行解释下这段awk代码,你可以把它当成一段【小程序】来理解。
先看懂整体结构
awk '{  ...  #每读取一行日志,就执行一次这里的代码}END {  # 所有行都处理完成后,执行一次这里  ...}' server.log
  • awk是按行处理文件的。
  • { ... }:对每一行都会执行。
  • END { ... }:只在最后执行一次。(做汇总)
逐行解释
sum_line=0
初始化一个变量,用来保存当前这一行所有size之和。为什么每一行sum_line都要清零,因为每条日志都要单独计算一行的size和。
for(i=1;i<NF;i++)
  • NF:当前行的字段总数
  • awk默认是以空格作为分割字段。
  • $1、$2 ... $NF 就是当前行被拆分的每一段。
这个for循环,就是在扫描这一行的每个字段。
if ($i ~ /^size:[0-9]+$/)
这是一个正则匹配判断:
  • $i:当前字段
  • ~:标识【正则匹配】。
能匹配到的:
size:878size:98
不能匹配到:
size:89,size:87res
split是把字符串按【:】进行分割:
split($i, a, ":")
分割后,将结果放入数组a中,比如size:89,a[0]="size",a[1]=89。
sum_line += a[2]
sum_line用于保存当前size总和。
total += sum_linecount++
count:日志行数。
total:所有日志的size总和。
END块,最终汇总:
END {  print "total_size =", total  print "line_count =", count  print "avg =", total / count}
这一段只在文件读完后执行一次。
执行结果如下:
大家好,我是码农夜读的作者棉花糖,欢迎大家和我一起背背诗、跑跑步、撸撸码~~~~~~~~~~~~。

往期推荐

Doris的重定向,折腾了整一天,终于搞明白。

使用doris之前,必须要知道这些。

解析高驰(COROS)、佳明(Garmin)Fit运动数据(go-echarts生成曲线),看看你的跑步能力提升了吗?

在Gin中使用go-echarts,实现折线、柱状图、饼图等图表的在线绘制

学会它,让你在Go中轻松绘制精美图表

测出这组数据,就可以放心使用RabbitMQ了

golang模板的详细使用方法

Golang泛型使用入门

Web开发的身份证:JWT(json web token)令牌使用方法

Web服务压力测试工具hey(golang)学习二:架构设计(源码学习)

Web服务压力测试工具hey学习一:使用方法

云端【多维度限流】技术方案设计,为服务稳定保驾护航

自动驾驶数据仓库:对时间片进行合并的小算法。

2026背诗第二首-《感遇》其七

2026新年新flag-好好背诗

每周一个30km的长距离训练,科学吗?

学到心理学的这3个知识点,让你在辅导孩子作业时不再鸡飞狗跳,一地鸡毛。

人生,当活成他的样子:竹林七贤之首-嵇康

读《崇祯皇帝传》之一:夹缝求生,初登大宝

被研究了无数遍的拙才“曾国藩”,到底有哪些人生逆袭的经验值得我们借鉴

2025越山向海张家口站:从草原天路到崇礼142.6公里,我们一起跑过。

大同华严寺:受人民爱戴的耿市长还会回来吗?薄伽教藏的合掌漏齿菩萨你知道是谁吗?

一个读写excel的简单程序(golang)

一个优秀的rabbitmq消费者(consumer)设计,可直接上线使用。

命令行参数的艺术:Python、Golang、C++技术实现

supervisor,你理应知道。

借助tritonserver完成gpt2模型的本地私有化部署

趴菜就是趴菜,捯饬3天,才搞出小程序头部banner,还是个半成品

小程序实现文章列表点击跳转公众号详情页

前端小趴菜终于把公众号和开发的不能再磕碜的小程序首页关联上了

李白:为何两次选择做了上门女婿?

我在百度的这10年~~

最新文章

随机文章