带有循环的 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 语句的主要内容,如果未能解决你的问题,请参考以下文章