[GRASS-user] v.rast.stats2 bug?
    Hamish 
    hamish_b at yahoo.com
       
    Thu Mar  3 03:54:47 EST 2011
    
    
  
Markus wrote:
> I can confirm this bug.
> 
> The offending line is
> sed -e '1d' "$STATSTMP" | awk -F "|" '{printf "\nUPDATE '${TABLE}' SET
> '${col[0]}' = %i , '${col[1]}' = %.2f , '${col[2]}' = %.2f,
> '${col[3]}' = %.2f , '${col[4]}' = %.2f , '${col[5]}' = %.2f ,
> '${col[6]}' = %.2f , '${col[7]}' = %.2f , '${col[8]}' = %.2f WHERE
> '${KEYCOL}' = %i;", $2,$3,$4,$5,$6,$7,$8,$9,$10,$1}'
...
> Actually I don't know how to fix the use of col[1] etc. (I
> tried a while).
it is trying to use shell $VARIABLES inside 'single quotes', so the $ is
treated literally instead of getting substituted.
the awk string either needs to be using double quotes like "{printf( .. )}"
or (better) you need to pass each variable to awk on the command line using
the -v flag:
    -v var=val
    --assign var=val
           Assign the value val to the variable var, before execution
           of the program begins.  Such variable values are available
           to the BEGIN block of an AWK program.
thus
$ TABLE=abc
$ awk -v TBL="$TABLE" 'BEGIN {print TBL}'
abc
(BEGIN is used to avoid it waiting for stdin)
...also quoting like ${TABLE} does nothing in this situation besides
clutter the readability. "quotes" must to used to protect from spaces in
the string:
$ VAL="a b"
$ ls "$VAL"
ls: a b: No such file or directory
$ ls ${VAL} 
ls: a: No such file or directory
ls: b: No such file or directory
$ ls ${VAL}_123
ls: a: No such file or directory
ls: b_123: No such file or directory
$ ls "${VAL}_123"
ls: a b_123: No such file or directory
Hamish
      
    
    
More information about the grass-user
mailing list