Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2980244
  • 博文数量: 272
  • 博客积分: 5544
  • 博客等级: 大校
  • 技术积分: 5496
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 00:48
个人简介

  每个人都要有一个骨灰级的爱好,不为金钱,而纯粹是为了在这个领域享受追寻真理的快乐。

文章分类

全部博文(272)

文章存档

2015年(2)

2014年(5)

2013年(25)

2012年(58)

2011年(182)

分类: LINUX

2011-08-02 12:08:24

testA 50 2
testA 80 5
testB 10 9
testC 15 7
testB 84 1
testA 12 3
testC 41 8
testC 24 4
testB 10 6
testA 52 8
 
文本中,第一列是标识,第2列是数值,第3列是表示第2列内容的在1~9中的位置,没有的用0补充,相同的标识和相同的位置就把第2列的内容累加,得到下面的效果:
 
testA   0  50  12   0  80   0   0  52   0
testB  84   0   0   0   0  10   0   0  10
testC   0   0   0  24   0   0  15  41   0
 
  1. awk '{a[$1,$3]+=$2;b[$1]}END{for(j in b){printf j;for(i=1;i<=9;i++){if(a[j,i])printf(" %3s",a[j,i]);else printf " %3s","0"}printf "\n"}}' file
[解析]
  分别把第2列的累加值和第1列的标识存入2个数组中,最后用for循环打印出来,刚好可以判断该数组是否是空值,空值的用0代替,有值的就输出该值。
阅读(2209) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~