表中awk的计算取决于第一列

表中awk的计算取决于第一列,awk,Awk,我有这张桌子 0 56 56 0 45 100 0 70 80 60 90 90 0 100 200 0.1 200 300 在这个表中,我想通过以下公式计算col2和col3的值 awk取决于col1值:如果col1=60,停止并开始新的计算,并将值放在新的列上,比如说col4和col5 重述,基于和: 对于第1列中的值小于60的行,应将第2列和第3列中的值添加到单独的总和中。当行在第1列中的值为60或更高时,打印第2

我有这张桌子

0     56   56  
0     45  100
0      70   80
60     90   90
0      100  200
0.1    200 300
在这个表中,我想通过以下公式计算
col2
col3
的值
awk
取决于
col1
值:如果
col1<60
开始计算
col2
col3
值如果
col1>=60
,停止并开始新的计算,并将值放在新的列上,比如说
col4
col5


重述,基于和:

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


谁能帮我一下吗

输出看起来像

col4   col5
171    236              first calc
60     90               stop
300    500              sec calc
$awk'
{

如果($1您是否可以修改所有列的所需输出?您的要求解释得很透彻-您需要更清楚地解释您正在做的事情。对于第1列中包含值小于60的行,您可能希望输出第2列和第3列的总和。当您在第1列中遇到值大于等于60的行时,打印前几行的总和并重置总和,然后打印读取的行。在文件末尾,打印前几行的总和。这就是您的想法吗?Jonathan Leffler谢谢,这正是我想要的。您可以在不丢失功能的情况下删除BEGIN block。
$ 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
awk '($1<60){sumc2+=$2;sumc3+=$3} ($1>=60){print sumc2, sumc3; sumc2=sumc3=0;print} END{print sumc2, sumc3}' sample.csv
171 236
60     90   90
300 500