【问题标题】:Awk if statement with loop带有循环的 awk if 语句
【发布时间】: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 的主体周围不需要大括号吗?
  • 是的,我忘记带牙套了,现在可以了

标签: awk


【解决方案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 但如果需要可以修复。

      【讨论】:

        猜你喜欢
        • 2017-03-31
        • 2016-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-28
        • 2012-06-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多