如何使用awk计算趋势?
How to compute trend using awk?
我有温度数据的时间序列:
ifile.txt
1921 25
1922 25.1
1923 24.2
1924 23.4
1925 24.4
1926 25.1
1927 23.6
1928 25.2
1929 23.9
1930 25.6
我想计算 1923-1929 期间的趋势。
我的算法是:
将以上点拟合成一条直线如
Y = mX + c ; where m is the trend
我可以找到整个时期的趋势,但我无法在选择特定时期时修改我的脚本。你能检查一下我的脚本吗?
awk '/1923/,/1929/ {if (NR==FNR) x[NR] = ;y[NR] = ;
sx += x[NR]; sy += y[NR];
sxx += x[NR]*x[NR];
sxy += x[NR]*y[NR];}
END{
det = NR*sxx - sx*sx;
trend = (NR*sxy - sx*sy)/det;
print trend;}' ifile.txt
打印的值不正确。
The correct value is 0.0679
你可以稍微简化一下,你算的不是匹配记录。 NR
将是 END 块中的总行数。
awk '/1923/,/1929/ {sx+=; sy+=; c++;
sxx+=*; sxy+=*}
END {det=c*sxx-sx*sx;
print det?(c*sxy-sx*sy)/det:"DIV0"}' file
还需要考虑分母为零。趋势上升为
0.0678571