2010-11-04 47 views
1

的方差我已经在时尚格式化下述文件如下所示 -AWK程序calcluate风速

DATA THROUGH 2001 YRS JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC ANN 
BIRMINGHAM AL 58 8.1 8.7 9.0 8.2 6.8 6.0 5.7 5.4 6.3 6.2 7.2 7.7 7.1 
HUNTSVILLE AL 34 9.1 9.4 9.8 9.2 7.9 6.9 6.1 5.8 6.7 7.3 8.1 9.0 7.9 
MOBILE AL 53 10.1 10.3 10.7 10.1 8.7 7.5 6.9 6.7 7.7 8.0 8.9 9.6 8.8 
MONTGOMERY AL 57 7.7 8.2 8.3 7.3 6.1 5.8 5.7 5.2 5.9 5.7 6.5 7.1 6.6 
ANCHORAGE AK 48 6.4 6.8 7.1 7.3 8.5 8.4 7.3 6.9 6.7 6.7 6.4 6.3 7.1 
ANNETTE AK 37 11.7 11.9 10.6 10.7 9.0 8.5 7.8 8.1 8.9 11.4 11.8 12.0 10.2 
BARROW AK 68 11.9 11.3 11.3 11.5 12.0 11.5 11.7 12.4 13.2 13.3 12.4 11.7 12.0 
BARTER IS. AK 33 15.1 14.4 13.7 12.0 12.7 11.6 10.9 11.8 13.2 14.8 14.9 13.9 13.2 
BETHEL AK 43 14.5 14.8 13.8 12.9 11.5 11.0 10.7 11.0 11.6 12.3 13.2 13.7 12.6 
BETTLES AK 26 5.9 6.3 7.1 7.5 7.2 6.8 6.6 6.2 6.4 6.4 5.8 5.7 6.5 

我需要计算的方差为除阿拉斯加每个状态由AK表示。 方差的公式为:nΣ(x^2) - (Σx^2)/ n(n-1)。

所有我现在就像是

BEGIN {FS ="\t"} {if ($2 != "AK") 
{ 
     sum1 = sum1 + ($4)^2 
     sum2 = sum2 + $4 
     n = n+1 
     if($2 != "AK") 
     { 
       sum1 = sum1 * n; 
       sum3 = sum1 - (sum2)^2 
       sum3 = sum3/(n*(n-1)); 
     } 


}} END {} 

BEGIN {FS ="\t"} {if ($2 != "AK") 
{ 

      sum1 = sum1 * n; 
      sum3 = sum1 - (sum2)^2 
      sum3 = sum3/(n*(n-1)); 

}} 

END {print "average " sum3} 

一些代码,我零错误

我矮的想法,如何计算这个公式得到一个师。任何关于打破代码的建议 - 寻找pattersn和/或完整的代码将不胜感激。

+0

是固定或可变的列数? – Jay 2010-11-04 02:01:31

+0

列固定.. – 2010-11-04 02:08:49

+0

为什么你使用awk这个? – Hollister 2010-11-04 02:12:59

回答

1

当状态不是AK时,这将第10列的正方形相加。然后使用你的公式。

BEGIN { 
    FS = "\t"; 
    n = 0; 
} 
{ 
    if($2 != "AK") { 
     x[n] = $10 * $10; 
     n++; 
    } 
} 

END { 
    sum = 0; 
    for(i = 0; i < n; i++) 
     sum += x[i]; 
    print (n*sum - sum)/(n * (n-1)); 
}