2014-01-28 30 views
0

我要總結一列的值,但我要的平均重置每112行聲明awk中如果與環

什麼是錯的這個計劃

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

+0

難道你不需要用括號括住身體的if嗎? – ooga

+0

是的,我忘了大括號,現在它可以工作 – user1683302

回答

1
awk '{ 
sum+=$4 
} 
NR%112==0 
{ 
a=sum*8; 
print a,a/112; 
sum=0; 
}' your_file 
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

可以縮短一些:

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