+ -
当前位置:首页 → 问答吧 → 用awk实现计算

用awk实现计算

时间:2011-02-20

来源:互联网

我有一个文件如下格式
5 2 1
7 1 1
8 1 3
12 1 4
15 4 2
21 2 4
23 2 3
25 2 3  
30 1 3
35 2 2
39 1 1
...
第一列是从小到大的一组数,但不连续,我想做的是,第1列的数字落在10-20(包含临界点)之间的就分别把第2列的数相加,第3列的数相加,输出结果为10-20  5 6,然后依次下去,都按10个单位进行计算,结果如下格式
10-20 5 6
20-30 7 13
30-40 4 6
....
哪位高手可以帮忙解决下,谢谢!

作者: susie_gan   发布时间: 2011-02-20

回复 susie_gan
  1. awk '!($1%10){a1[int(($1-1)/10)]+=$2;a2[int(($1-1)/10)]+=$3}{a1[int($1/10)]+=$2;a2[int($1/10)]+=$3}END{for (i in a1) print i*10"-"(i+1)*10,a1[i],a2[i]}' file
复制代码

作者: ywlscpl   发布时间: 2011-02-20

回复 susie_gan
  1. awk 'BEGIN{min = 10; max = 20}{
  2.         if($1 < min) next;
  3.         if($1 >= min && $1 <= max){
  4.                 t += $2
  5.                 h += $3
  6.                 a[min"-"max] = t" "h
  7.         }
  8.         if($1 >= max){
  9.                 min = min+10;
  10.                 max = max+10;
  11.                 t = $2
  12.                 h = $3
  13.                 a[min"-"max] = t" "h
  14.         }
  15. }END{
  16.         for(i in a){
  17.                 print i" "a[i]
  18.         }
  19. }' urfile|sort -n|column -t
复制代码
10-20  5  6
20-30  7  13
30-40  4  6

作者: xrzs1986   发布时间: 2011-02-21

热门下载

更多