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