The syntax looks correct. By the error message you are getting and the fact that you said this was in a script (not just on the command line) I suspect that there is a spurious, non-printable character in your script that is hosing up the scanning of the line properly and causing it to think that
Try this:
a. you can often find these non-printable chars by using "od -c filename | less"
b. re-type in the command on a new line and delete the old line altogether
Here is an example of how I reproduced your error. Look closely at the output of 'od -c' where there is actually a bad char (002 == CNTL-B) that your editor may not show you, but truly throws an error for nawk:
$ cat badnawk
#!/bin/sh
nawk -F":" -v red=2 '{print $red}' $0
$
$ sh badnawk
nawk: can't open file {print $red}
source line number 1
$
$
$ od -c badnawk
0000000 # ! / b i n / s h \n n a w k -
0000020 F " : " - v 002 r e d = 2 '
0000040 { p r i n t $ r e d } ' $ 0
0000060 \n
0000061