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

Hamish hamish_b at yahoo.com
Thu Aug 6 21:05:47 EDT 2009


Markus Neteler wrote:
> 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'
....


it starts with "tot += $3" [aka "tot = tot + $3"], but tot is unused at
that point so undefined. (maybe awk can be trusted to always init new
vars to 0? no idea)

adding a 'BEGIN { tot = 0; sumX = 0; ... }' section at the start of the
awk script might help.


?
Hamish



      



More information about the grass-dev mailing list