shell脚本之awk命令——按列求平均值、最大值、最小值

写在前面
awk命令求极值和均值需要熟悉该命令的基本用法,如果你不熟悉该命令,请先阅读shell脚本之awk命令——分隔符介绍一文。本篇博文带你熟悉求平均值、最大值、最小值的方法,并以实际的应用带你进一步掌握awk的高级用法。
以下为求平均值、最大值、最小值用到的文件data,使用cat data查看内容为
1.0
2.0
3.0
4.0
5.0
6.0
7.0
8.0
9.0
10.0

awk求平均值
awk '{sum += $1} END {printf "NR = %d,Average = %3.3f\n",NR,sum/NR}' data
1
或者使用cat命令组合使用

cat data|awk '{sum += $1} END {printf "NR = %d,Average = %3.3f\n",NR,sum/NR}'
1
printf和C语言中的用法类似,你可以使用%f输出小数,%d输出整数等等。awk中的NR表示有多少行内容。
计算结果:


awk求最大值
awk 'BEGIN{ max = 0} {if ($1 > max) max = $1; fi} END{printf "Max = %.1f\n",max}' data
1
或者

cat data|awk 'BEGIN{ max = 0} {if ($1 > max) max = $1; fi} END{printf "Max = %.1f\n",max}'
1
计算结果:


awk求最小值
求最小值的时候需要注意,min的初始值需要设置为一个大数,最好大于所有数的最大值。如果min被设为初始值0,那下面的结果将是错误的。

awk 'BEGIN{min = 65535} {if ($1 < min) min = $1;fi} END{printf "Min = %.1f\n",min}' data
1
或者

cat data|awk 'BEGIN{min = 65535} {if ($1 < min) min = $1;fi} END{printf "Min = %.1f\n",min}'
1
计算结果:


awk求极值、均值的实际应用
求某个进程在某段时间内的CPU占用峰值、平均值
假设现在有一个进程HaHelper,要统计该进程的CPU占用,使用top命令查看它的cpu使用:
top -d 1|grep HaHelper,一秒刷新一次CPU使用情况。

红框所在的列即为CPU占用,现在把这个结果输出到文件中,方便后续统计。
使用重定向符号>把执行结果输出到文件top -d 1|grep HaHelper > hacpu.log
此处为了简化问题,只取了前10条记录:此处可以根据需要,取24h的数据24*60*60行记录...
cat hacpu.log | head -n 10

如何拿到CPU占用那一列的值呢?awk命令很容易就能帮你做到这个。cat hacpu.log |head -n 10|awk '{print $10}',也可能是$9,第九列的内容,取决于系统是否把空列作为一列来处理。

输出上面的数据到文件中:
cat hacpu.log |head -n 10|awk '{print $10}' > total.log
求峰值(最大值)

awk 'BEGIN{max=0} {if ($1>max) max=$1; fi} END{printf "Max=%.1f\n",max}' total.log
1

最小值

awk 'BEGIN{min=65535} {if ($1<min) min=$1;fi} END{printf "Min=%.1f\n",min}' total.log
1

平均值

awk '{sum+=$1} END {printf "NR = %d,Average = %3.3f\n",NR,sum/NR}' total.log
1

awk命令非常强大,与其他命令结合使用可以很好帮我们解决一些问题,随着深入了解,相信你会越来越熟练。

posted @ 2023-03-15 17:53  忧伤恋上了快乐  阅读(1070)  评论(0编辑  收藏  举报