awk的表计算取决于第一列

时间:2017-02-28 22:48:43

标签: awk

我有这张桌子

0     56   56  
0     45  100
0      70   80
60     90   90
0      100  200
0.1    200 300

在此表格中,我想计算col2col3的值 awk取决于col1值:如果col1 < 60开始计算col2和 如果col3col1 >= 60值,请停止并开始新计算并将值放在新列上,请说col4col5

重申,基于commentresponse

对于第1列中的值小于60的行,应将第2列和第3列中的值添加到单独的总和中。当第1列中的行值为60或更多时,打印第2列和第3列的总和并将总和重新归零,然后打印读入的行。在输入结束时,打印第2列的剩余总和和3.

任何人都可以帮我这个吗?

输出看起来像

col4   col5
171    236              first calc
60     90               stop
300    500              sec calc

2 个答案:

答案 0 :(得分:1)

awk '($1<60){sumc2+=$2;sumc3+=$3} ($1>=60){print sumc2, sumc3; sumc2=sumc3=0;print} END{print sumc2, sumc3}' sample.csv

sumc2sumc3分别是column2和column3之和的总和。 当column1 <60时,保持对列的总结;一旦column1>> = 60,打印求和值,重置它们并打印当前输入。

由于您没有提供完整的所需输出,我打印格式

输出:

171 236
60     90   90
300 500

答案 1 :(得分:0)

$ awk '
  {
    if($1<60){
      sum_b+=$2;
      sum_c+=$3;
      print $0
    } else {
      print $1,$2,$3,sum_b,sum_c;
      sum_b=0;
      sum_c=0
    }
  }
  END {
    print"","","",sum_b,sum_c
  }
' datafile
0 56 56
0 45 100
0 70 80
60 90 90 171 236
0 100 200
0.1 200 300
   300 500