[GRASS-dev] r.regression.line crash in awk (awk debugging)

Markus Neteler neteler at osgeo.org
Thu Aug 6 13:13:45 EDT 2009


Hi,

I wanted to run a linear regression on a DEM and a temperature
map but got an error:
awk: cmd. line:2: (FILENAME=- FNR=3) fatal: division by zero attempted


I have reduced everything to this part (added --lint):

#!/bin/sh

unset LC_ALL
LC_NUMERIC=C
export LC_NUMERIC

echo "345.551054 1 1
364.229489 1 1
382.907925 1 3" | awk --lint '{tot += $3;sumX +=$1 * $3; sumsqX
+=$1*$1*$3;sumY +=$2 * $3; sumsqY +=$2*$2*$3; sumXY +=$1*$2*$3;}
END {B=(sumXY - sumX*sumY/tot)/(sumsqX - sumX*sumX/tot);
R= (sumXY - sumX*sumY/tot)/((sumsqX - sumX^2/tot)*(sumsqY - sumY^2/tot))^0.5;
mediaX=sumX/tot;sumsqX=sumsqX/tot;varX=sumsqX-(mediaX^2);sdX=varX^0.5;
mediaY=sumY/tot;sumsqY=sumsqY/tot;varY=sumsqY-(mediaY^2);sdY=varY^0.5;
A=mediaY - B*mediaX; F= R^2/(1-R^2/tot-2);
print A, B, R, tot, F, mediaX, sdX, mediaY, sdY}'

Running this, I get:
awk: (FILENAME=- FNR=1) warning: reference to uninitialized variable `tot'
awk: (FILENAME=- FNR=1) warning: reference to uninitialized variable `sumX'
awk: (FILENAME=- FNR=1) warning: reference to uninitialized variable `sumsqX'
awk: (FILENAME=- FNR=1) warning: reference to uninitialized variable `sumY'
awk: (FILENAME=- FNR=1) warning: reference to uninitialized variable `sumsqY'
awk: (FILENAME=- FNR=1) warning: reference to uninitialized variable `sumXY'
awk: cmd. line:2: (FILENAME=- FNR=3) fatal: division by zero attempted

The script used to work - what could be wrong? Using 6.4 here but it is
identical to 6.5. My awk foo is a bit limited...

Markus


More information about the grass-dev mailing list