您的位置:首页 > 其它

使用awk进行简单文件处理对文件分割求平均

2016-01-26 15:32 387 查看

一、文件格式

线上有这么一份文件需要做一个统计的信息

格式类似如下:

不同为:;
不同为:;
不同为:;
不同为:;
不同为:;
不同为:;
不同为:;
不同为:;
无用个数为:13 总个数为:13 无用比例为:1;
无用个数为:16 总个数为:16 无用比例为:1;
无用个数为:21 总个数为:21 无用比例为:1;
无用个数为:18 总个数为:18 无用比例为:1;
无用个数为:20 总个数为:20 无用比例为:1;
无用个数为:23 总个数为:23 无用比例为:1;
无用个数为:19 总个数为:19 无用比例为:1;
无用个数为:60 总个数为:60 无用比例为:1;
Thread:7	TotalCount:2	CostTime:0.140625s	TongjiCostTime:0.09375s	SelectCostTime:0.015625s	InsertCostTime:0.03125s;
Thread:8	TotalCount:2	CostTime:0.140625s	TongjiCostTime:0.09375s	SelectCostTime:0.015625s	InsertCostTime:0.03125s;
Thread:5	TotalCount:2	CostTime:0.140625s	TongjiCostTime:0.09375s	SelectCostTime:0.015625s	InsertCostTime:0.03125s;
Thread:4	TotalCount:2	CostTime:0.15625s	TongjiCostTime:0.09375s	SelectCostTime:0.015625s	InsertCostTime:0.046875s;
Thread:3	TotalCount:2	CostTime:0.15625s	TongjiCostTime:0.109375s	SelectCostTime:0.015625s	InsertCostTime:0.03125s;
Thread:6	TotalCount:2	CostTime:0.15625s	TongjiCostTime:0.109375s	SelectCostTime:0.015625s	InsertCostTime:0.03125s;
Thread:9	TotalCount:2	CostTime:0.15625s	TongjiCostTime:0.09375s	SelectCostTime:0.03125s	InsertCostTime:0.03125s;
Thread:0	TotalCount:2	CostTime:0.15625s	TongjiCostTime:0.109375s	SelectCostTime:0.015625s	InsertCostTime:0.03125s;


二、所需要做的处理

所需要做的处理就是将无用个数,总个数,无用比例,以及统计时间,select时间,insert时间全部求出一个平均值,进而来估测性能的改进或者之后要做如何的处理

三、使用方法

第一个想到使用awk进行处理,将所有的文件用vim进行处理后,得到类似如下的格式:

:31 :83 :0.373493975903614
:43 :92 :0.467391304347826
:35 :95 :0.368421052631579
:38 :93 :0.408602150537634
:33 :98 :0.336734693877551
:37 :106 :0.349056603773585
:38 :104 :0.365384615384615
以上是无用比例部分的处理,将所有的文件拷贝到本地,然后使用grep命令

grep "无用个数" temp.txt >temp2.txt
得到所有的之后进行替换,最终生成处理格式的结果

这个时候的数据已经成为规则的数据,以下按照awk进行处理,按照冒号进行分割,然后对第二列,第三列,第四列分别进行求和求平均

awk使用如下

cat temp2.txt|awk -F ':' '{sum+=$3} END {print "average = ", sum/NR}'
以上的命令就可以实现所需要的功能,其中NR是所有的行数,其中$3对应的是总的个数,如果想对每一行进行输出就是

cat temp2.txt|awk -F ':' '{print "$3 = ", $3}'
如果想对总和进行输出就是

cat temp2.txt|awk -F ':' '{sum+=$3} END {print "sum = ", sum}'
其中awk分为三部分,begin部分为每一行需要进行的预处理,{}为对于每一行进行的处理,end部分为对于最终处理之后进行的处理,表示的是最终处理
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: