[gridengine users] reading arguments using awk with escaped variables

Sara Rolfe smrolfe at u.washington.edu
Tue Apr 17 05:50:35 UTC 2012


Right, so if this was a simple bash script I would not need the  
escape.  But my assumption was that when SGE interpreted a script the  
escape was needed pass the commands through correctly.  However from  
other examples I've seen, it doesn't look like other SGE users need to  
do this, so I'm not clear on why this seems necessary in my case.

Thanks,
Sara

On Apr 16, 2012, at 10:43 PM, Rayson Ho wrote:

> I'm also not a scripting expert... but in general, if you escape the $
> symbol, it means that you don't want the shell to treat it as an env
> var. Eg:
>
> #!/bin/bash
>
> export ONE=1
>
> echo $ONE
> echo \$ONE
>
>
> Output:
> 1
> $ONE
>
> Rayson
>
>
>
> On Tue, Apr 17, 2012 at 1:37 AM, Sara Rolfe  
> <smrolfe at u.washington.edu> 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.
>>
>> Thanks,
>> Sara
>>
>> On Apr 16, 2012, at 10:27 PM, Rayson Ho wrote:
>>
>> It works for bash too... except with the "escape" one you are using:
>>
>> #!/bin/bash
>>
>> export SGE_TASK_ID=2
>>
>> line2=`awk -v task_id=$SGE_TASK_ID 'NR==task_id' "/tmp/fileList.txt"`
>> echo $line2
>>
>> line2=$(awk -v "task_id=$SGE_TASK_ID" 'NR==task_id' "/tmp/ 
>> fileList.txt" )
>> echo $line2
>>
>> line2=$(awk -v "task_id=$SGE_TASK_ID" 'NR==task_id' "/tmp/ 
>> fileList.txt" )
>> echo \$line2
>>
>> [rayson at computer source]$ ./sh
>> L2
>> L2
>> $line2
>>
>> Why are you doing "echo \$line2"?
>>
>> Rayson
>>
>>
>>
>> On Tue, Apr 17, 2012 at 1:21 AM, Sara Rolfe  
>> <smrolfe at u.washington.edu>
>> wrote:
>>
>> I'm using bash.
>>
>>
>> Thanks,
>>
>> Sara
>>
>>
>>
>> On Apr 16, 2012, at 10:20 PM, Rayson Ho wrote:
>>
>>
>> What shell are you using??
>>
>>
>> Rayson
>>
>>
>>
>> On Tue, Apr 17, 2012 at 1:15 AM, Sara Rolfe  
>> <smrolfe at u.washington.edu>
>>
>> wrote:
>>
>>
>> Hi Rayson,
>>
>>
>> Thanks for your reply.  I have tried using -v to pass variables to  
>> awk,
>>
>> but
>>
>> it is not working correctly.  I think it's because my script  
>> requires all
>>
>> variables to be escaped and I don't know how to pass the escape  
>> symbol
>>
>> correctly.
>>
>>
>> line2=$(awk -v "task_id=$SGE_TASK_ID" 'NR==task_id'
>>
>> "/myPath/fileList.txt" )
>>
>> echo \$line2
>>
>>
>> has a blank output, but so does
>>
>>
>> line2=$(awk -v "task_id=\$SGE_TASK_ID" 'NR==task_id'
>>
>> "/myPath/fileList.txt"
>>
>> )
>>
>> echo \$line2
>>
>>
>> Can you give me any insight into passing the escape sign or why I am
>>
>> needing
>>
>> to escape all the variables in my script?
>>
>>
>> Thanks,
>>
>> Sara
>>
>>
>>
>> On Apr 16, 2012, at 9:13 PM, Rayson Ho wrote:
>>
>>
>> line2=$(awk -v "task_id=$SGE_TASK_ID" 'NR==task_id' "/tmp/ 
>> fileList.txt" )
>>
>>
>>
>>
>>



More information about the users mailing list