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
- 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代替,有值的就输出该值。
阅读(2261) | 评论(0) | 转发(0) |