带有循环的 awk if 语句

Posted

技术标签:

【中文标题】带有循环的 awk if 语句【英文标题】:Awk if statement with loop 【发布时间】:2014-02-19 03:52:58 【问题描述】:

我想对一列的值求和,但我想每 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

【问题讨论】:

在 if 的主体周围不需要大括号吗? 是的,我忘记带牙套了,现在可以了 【参考方案1】:
awk '
sum+=$4

NR%112==0

a=sum*8;
print a,a/112;
sum=0;
' your_file

【讨论】:

【参考方案2】:

忘记带牙套了

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

谢谢

【讨论】:

【参考方案3】:

你可以缩短一些:

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 但如果需要可以修复。

【讨论】:

以上是关于带有循环的 awk if 语句的主要内容,如果未能解决你的问题,请参考以下文章

awk 条件及循环语句

awk

C# - 带有 if 语句的 Foreach 循环

带有 if 语句的循环的空数组

awk命令小记2之actions

在带有许多 if 语句的 for 循环中使用 continue 时性能是不是有所提高?