awk if语句带循环

时间:2014-01-28 02:15:31

标签: awk

我想对列的值求和,但我想重置每112行的平均值

这个程序出了什么问题

BEGIN{ sum=0;i=0}

{ sum=sum+$4
i=i+1
print i
if (i==112)
       print "total " sum*8 " average " (sum/i)*8  
       sum=0
       i=0

} 

END{}

输出始终为1

3 个答案:

答案 0 :(得分:1)

我忘记了大括号

BEGIN{ sum=0;i=0}

{ sum=sum+$4
 i=i+1
 print i
 if (i==112)
   {print "total " sum*8 " average " (sum/i)*8  
   sum=0
   i=0
   }

} 

END{}

谢谢

答案 1 :(得分:1)

你可以缩短一些:

awk '
{ sum+=$4
 i+=1
 print i
 if (i==112)
   {print "total " sum*8 " average " (sum/i)*8  
   sum=i=0
   }
}' file

您也可以使用NR代替i

awk '
{ sum+=$4
 print NR%112
 if (NR%112==0)
   {print "total " sum*8 " average " (sum/112)*8  
   sum=0
   }
}' file

我看到它用它打印0而不是行号112,但如果需要可以修复。

答案 2 :(得分:1)

awk '{
sum+=$4
}
NR%112==0
{
a=sum*8;
print a,a/112;
sum=0;
}' your_file