一直都知道awk是一个很强大的东西
但是一直都没有太多机会去使用
这几天一个离职跳去Tencent的同事在QQ问我一些问题
仔细一想
这不正是当初Tencent笔试的题目吗
看来Tencent的笔试还算实在
都是平时工作遇到最多的问题拿出来考
趁机学习了一下搞懂了当初笔试没弄明白的一个问题
有下面一个文本,包含两个字段,邮箱、发送邮件字节数,分别求出每个邮箱发送字节数总和及平均数
a.txt
42116 tengxun@qq.com
41288 tengyzw@qq.com
41017 tengxun@qq.com
489389 abc@qq.com
848 fkj@qq.com
322 abc@qq.com
904 fkj@qq.com
如果不用关联数组
你可以把不同的邮箱记录提取到不同的文件中然后求和及平均,显然这很麻烦
awk一条命令搞定
cat a.txt |awk ‘{sum[$2]+=$1;count[$2]++}END{for (i in sum) print i,sum[i], sum[i]/count[i] }’
这条简短的语句包含了很多功能,sum[$2]+=$1创建了一个以邮箱字符串为索引的数组并且把不同邮箱的发送字节数求和,count[$2]++则对邮箱出现的次数做了计数相当于uniq -c。
显示结果如下:第一列为邮箱名 第二列为和发送字节数总和 第三列为平均字节数
abc@qq.com 489711 244856
tengyzw@qq.com 41288 41288
tengxun@qq.com 83133 41566.5
fkj@qq.com 1752 876
Place your comment