一个awk数组的月经问题,以后不想看到了。

875阅读 0评论2010-11-03 expert1
分类:系统运维

有两列数据,格式如下:
  1. a 1
  2. b 3
  3. c 8
  4. d 5
  5. e 5
  6. c 4
  7. e 2
  8. a 3
其中a、c、e重复出现,我想对第一列重复出现的量取平均值,结果应如下:
  1. a 2
  2. b 3
  3. c 6
  4. d 5
  5. e 3.5

awk '{a[$1]+=$2;b[$1]++}END{for (i in a)print i,a[i]/b[i]}'

======================

还有一个nestat -anln|awk '{a[$NF]++}END{for(i in a)print i,a[i]}'

======================

以前去网易的面试居然考我这个简单的问题^_^

补充一个高级点的月经问题,

2014050501|A1|B1|C1|0|12
2014050502|A1|B1|C1|1|12
2014050501|A1|B1|C1|3|35
2014050501|A1|B1|C1|0|45
2014050501|A2|B2|C2|0|25
2014050502|A2|B2|C2|1|34
2014050503|A2|B2|C2|1|57
.......

实现输出:
以小时为单位,统计出第2、3、4列相同,并且第5列=0的个数, 与第5列=1的个数。
awk -F\| '{t=$1","$2","$3","$4;if($5==0)a[t]++;if($5==1)b[t]++;c[t]}END{for(i in c)printf "%s,%d,%d\n",i,a[i],b[i] | "sort"}'

高级月经问题,模拟了多维数组,不过换汤不换药:)

上一篇:awk-文件拼接(类似paste/join)
下一篇:awk--最大子段和(算法)