Thanks, I did try single quotes too, but get the same problem. Maybe it would help if you could look at the test script I'm submitting? I'd really like to know if there's something I'm doing which makes escaping the variables necessary. I've copied it below.

#!/bin/bash
#$ -cwd
#$ -S /bin/bash
#
start=1
end=3
step=1
email="[email protected]"
jobname="SmoothingFilter_test"
#
cat <<EOF | qsub
#!/bin/bash
#\$ -S /bin/bash
#\$ -M $email
#\$ -m be
#\$ -N $jobname
#\$ -t $start-$end:$step
#\$ -e /myPath
#\$ -o /myPath
#
uname -a
#
infile=$(awk -v 'line=$SGE_TASK_ID' 'NR == line' /myPath/ my_outfile_list.txt)
#
echo "The input file is: $infile"
echo "The escaped input file is: \$infile"
echo "The task ID is: $SGE_TASK_ID"
echo "The escaped task ID is: \$SGE_TASK_ID"
#
EOF
#
exit 0

The output file for the third iteration is:

The input file is:
The escaped input file is:
The task ID is: undefined
The escaped task ID is: 3

On Apr 17, 2012, at 2:37 AM, Reuti wrote:

Am 17.04.2012 um 11:08 schrieb George Georgalis:

On Mon, Apr 16, 2012 at 10:37 PM, Sara Rolfe <[email protected] > wrote:
I am new to both scripting and SGE, so I don't understand why, but I need to
escape all the variables in my script.  For example,

awk "NR==$SGE_TASK_ID" /myPath/fileList.txt

produces a blank output, but if I escape the env variable, like:

awk "NR==\$SGE_TASK_ID" /myPath/fileList.txt

then I get the correct line from the text file. The problem is when I try to assign this output to a variable. I still need to use the escape, but I
think it's not being passed correctly.


I usually use single quotes for awk. It prevents shell expansion of
the symbols. (Shell expansion applies to double quoted arguments but
not single quoted ones.)

I second this. Using -v to pass arguments to awk (they are known in the BEGIN block already) or list them after the script (they are only available outside of the BEGIN block) and using single quotation marks for the script is the careful way to avoid the mentioned side effects.

But I would accept an exception here if the only rule is a test for the NR field as it's still clear what is done.

--

Do you submit an array job? Otherwise $SGE_TASK_ID won't be set to 1 but "undefined". Then:

${SGE_TASK_ID/undefinded/1}

might help and give you a 1 for non-array jobs, hence:

#!/bin/sh
echo $(awk "NR==${SGE_TASK_ID/undefined/1}" file)

is working fine for me.

-- Reuti


.George


--
George Georgalis, (415) 894-2710, http://www.galis.org/

_______________________________________________
users mailing list
[email protected]
https://gridengine.org/mailman/listinfo/users



_______________________________________________
users mailing list
[email protected]
https://gridengine.org/mailman/listinfo/users

Reply via email to