[Linux] awk统计平均值、最大值和最小值

您所在的位置:网站首页 awk打印包含关键字的列 [Linux] awk统计平均值、最大值和最小值

[Linux] awk统计平均值、最大值和最小值

2024-06-10 13:00| 来源: 网络整理| 查看: 265

1.已提取出一列数处理

假设data.txt文件有一列数

求平均值,总和除以行数

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

求最大值,初始值给0,找到更大的数替换

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

求最小值,初始值给一个较大的数,找到更小的数替换

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

参考资料:  shell脚本之awk命令——按列求平均值、最大值、最小值 https://blog.csdn.net/xb_2015/article/details/120050869

考虑一个性能测试环境,要保证每周期数据及时处理,则需要统计该路径下所有统计文件中记录的Decoder模块每个周期的处理时长(Decoder-Duration)的平均值、最大值、和最小值

Statistics_.txt 文件内容样式如下 # Decoder-ROP,Decoder-Duration,CPU%   Decoder-202304251315,6.85,18.65% # Reporter-ROP,Reporter-Duration,CPU%   Reporter-202304251315,6.80,5.45%

分析步骤如下: (1)找出对应的行

[root@xxx Report]# grep Decoder- ./Statistics*.txt | grep -v Decoder-ROP | head -4         ./Statistics_202304230900.txt:  Decoder-202304230900,6.97,18.99% ./Statistics_202304230915.txt:  Decoder-202304230915,6.87,18.81% ./Statistics_202304230930.txt:  Decoder-202304230930,6.89,18.87% ./Statistics_202304230945.txt:  Decoder-202304230945,6.86,18.73%

(2)取出空格分隔的第二段

[root@xxx Report]# grep Decoder- ./Statistics*.txt | grep -v Decoder-ROP | awk '{print $2}' | head -4 Decoder-202304230900,6.97,18.99% Decoder-202304230915,6.87,18.81% Decoder-202304230930,6.89,18.87% Decoder-202304230945,6.86,18.73%

(3)取出逗号分隔的第二段(-F, #指定分隔符为逗号)

[root@xxx Report]# grep Decoder- ./Statistics*.txt | grep -v Decoder-ROP | awk '{print $2}' | awk -F, '{print $2}' | head -4 6.97 6.87 6.89 6.86

(4) 计算平均值、最大值、最小值

平均值 [root@xxx Report]# grep Decoder- ./Statistics*.txt | grep -v Decoder-ROP | awk '{print $2}' | awk -F, '{print $2}' | awk '{sum += $1} END {printf "NR = %d,Average = %3.2f\n",NR,sum/NR}' NR = 312,Average = 6.90 最大值 [root@xxx Report]# grep Decoder- ./Statistics*.txt | grep -v Decoder-ROP | awk '{print $2}' | awk -F, '{print $2}' | awk 'BEGIN{ max = 0} {if ($1 > max) max = $1; fi} END{printf "Max = %.1f\n",max}' Max = 9.8 最小值 [root@xxx Report]# grep Decoder- ./Statistics*.txt | grep -v Decoder-ROP | awk '{print $2}' | awk -F, '{print $2}' | awk 'BEGIN{min = 65535} {if ($1 < min) min = $1;fi} END{printf "Min = %.1f\n",min}' Min = 3.9

2.数据文件包含多列数

只要把上述的 $1(第一列) 换成对应的列号即可,考虑以下文件 test.txt

1727,908,1327,4646407,5.38% 1610,908,1335,4673779,5.41% 1580,908,1319,4619004,5.35% 1638,908,1323,4631397,5.36% 1719,908,1322,4628677,5.36% 1685,908,1329,4654044,5.39% 1707,908,1326,4643499,5.37% 1985,908,1328,4651098,5.38% 1993,908,1331,4659000,5.39% 1679,908,1333,4667734,5.40% 1777,908,1338,4683686,5.42% 1865,908,1328,4651117,5.38%

现在求第4列的最大值

[root@mr32 Report]# awk -F, 'BEGIN {max = 0} {if ($4 > max) max=$4} END {print "Max=", max}' test.txt Max= 4683686



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3