Trouble with passing Variable from bash to awk gsub command


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Trouble with passing Variable from bash to awk gsub command
# 1  
Old 12-09-2011
Trouble with passing Variable from bash to awk gsub command

Would really appreciate it if someone could point out my mistake in this line of code, i've been staring blankly at it trying everything i can think of some time now and coming up with nothing.


Code:
#!/bin/bash
echo "Enter Username"
read Username

awk -F: -v var=${Username} '/^var:/ {gsub(/foo/,"bar", $2); print}' FILENAME

Have already tried...

Code:
awk -F: -v var=${Username} "/^$var:/" '{gsub(/foo/,"bar", $2); print}' FILENAME

awk -F: -v var=${Username} "/^var:/" '{gsub(/foo/,"bar", $2); print}' FILENAME

awk -F: -v var="$Username" "/^var:/" '{gsub(/foo/,"bar", $2); print}' FILENAME

Desired output is to have the script replace "foo" with "bar" in field 2 of FILENAME only on lines beginning with Username entered into read.


After this step the idea is to replace "foo" with ANY data that's in the specified Field, and the Field number to also be specified by the user via a read command.
So if anyone knows a simpler command for doing that all in 1 go that'd be much appreciated too.
# 2  
Old 12-09-2011
Hi,

After searching this forum for "How to pass a variable to awk" and reading this.

https://www.unix.com/shell-programmin...iable-awk.html

Try:
Code:
awk -F: -v var=${Username} '$0 ~ var {gsub(/foo/,"bar",$2); print}'  FILENAME

'var' is being treated as a literal string and not as a 'variable'

HTH
# 3  
Old 12-09-2011
Thanks for the reply.

Code:
awk -F: -v var=${Username} '$0 ~ var {gsub(/foo/,"bar",$2); print}'  FILENAME

Changes every instance of foo in the second field into bar, not just on lines starting with the Username
# 4  
Old 12-09-2011
This would better match the requirement:
Code:
awk -F: '/^'"$Username"':/ {gsub(/foo/,"bar", $2); print}' FILENAME

# 5  
Old 12-09-2011
Here is what I tried.

less FILENAME
Quote:
Richard:foo
Sam:foo
Carl:foo
less test.sh
Code:
#!/bin/bash

echo "Enter Username"
read Username

awk -F: -v var=${Username} '$0 ~ var {gsub(/foo/,"bar",$2); print}'  FILENAME

bash test.sh
Quote:
Enter Username
Richard
Richard bar
less FILENAME
Quote:
Richard:foo
Sam:foo
Carl:foo
I am using GNU Awk 3.1.7

This is what I tested with. Maybe you could give a sample of the result you are getting.
This User Gave Thanks to ni2 For This Post:
# 6  
Old 12-09-2011
Quote:
Originally Posted by jlliagre
This would better match the requirement:
Code:
awk -F: '/^'"$Username"':/ {gsub(/foo/,"bar", $2); print}' FILENAME

Thanks for the help but that doesn't produce any output for me.

do you not have to -v and assign the shell variable as an awk variable before using it with an awk command?

---------- Post updated at 06:25 AM ---------- Previous update was at 06:21 AM ----------

Quote:
Originally Posted by ni2
Here is what I tried.

...

This is what I tested with. Maybe you could give a sample of the result you are getting.
I just created the exact same files you have used and it works perfectly, yet there's no difference i can see in my practical file...

two seconds and i'll run some more tests...


EDIT:


This will teach me for trying to write scripts after being awake for 24 hours.
My shell variable was named $UserName

the variable i was trying to use was name $Username

simple idiotic mistake.
Thanks for your help, your last post really made me go back and look at other things it could be once i knew the syntax was already correct.

---------- Post updated at 06:31 AM ---------- Previous update was at 06:25 AM ----------

One more thing before you dissappear.

Code:
read FieldNo

awk -F: -v var=${Username} -v var2=${FieldNo} '$0 ~ var {gsub($var2,"bar"); print}' FILENAME

is this possible to do with $var2 specifiying the field to replace. if the input at read FieldNo is a number, for example "2"

or even

Code:
 read data
read newdata

awk -F: -v var=${Username} -v var1=${data} -v var2=${newdata} '$0 ~ var {gsub(var1,var2); print}' FILENAME


Last edited by Nostyx; 12-09-2011 at 02:56 AM..
# 7  
Old 12-09-2011
gsub does a global substitution. So try sub?

Code:
#!/bin/bash

echo "Enter Username"
read Username
echo "Field"
read FieldNo

awk -F: -v var=${Username} -v var2=${FieldNo} '$0 ~ var {sub($var2,"bar"); print}' FILENAME

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk gsub command to replace multiple spaces

Hi Forum. I'm trying to cleanup the following data elements (To remove any occurences of commas and any extra spaces) while preserving the <TAB> delimiter using awk gsub but I have not been successful. Original Data: 4365 monte des source rue,, ,<TAB>trevost<TAB>QC Desired Data:... (1 Reply)
Discussion started by: pchang
1 Replies

2. Shell Programming and Scripting

File creation using awk and gsub command

I have input file 04000912|100:|||||]|101:||]|creDate:1451876825000|1441324800000:]|1444003200000:]|1446595200000:]|1449187200000:]|1451865600000:] I have to get output as below ID|Re_Date|Re_Value|Re_date 04000912|100|40.0|44 04000912|100|50.0|55 04000912|100|60.0|66... (4 Replies)
Discussion started by: shabeena
4 Replies

3. Shell Programming and Scripting

Passing variable from bash to perl script

Hi All, I need to pass a variable from bash script to perl script and in the perl script i am using those variables in the sql query but its giving error : Use of uninitialized value $ENV{"COUNTRYCD"} in concatenation (.) or string at /GIS_ROOT/custom/tables/DBread_vendor.pl line 50. Can ... (6 Replies)
Discussion started by: NileshJ
6 Replies

4. Shell Programming and Scripting

Assign awk gsub result to a variable

Hello, I have searched but failed to find what exactly im looking for, I need to eliminate first "." in a output so i can use something like the following echo "./abc/20141127" | nawk '{gsub("^.","");print}' what i want is to use gsub result later on, how could i achieve it? Let say... (4 Replies)
Discussion started by: EAGL€
4 Replies

5. Shell Programming and Scripting

Passing string as variable(s) in bash

I'm trying to write a basic bash script that takes input you give (what directory, if any, what name, if any ....) and passes the information to find. I'm trying to just create a string with all variables and then pass it to find. So far I have this extremely simple: #!/bin/bash -f ... (2 Replies)
Discussion started by: Starting_Leaf
2 Replies

6. Shell Programming and Scripting

Trouble with passing variable to sed

Here is my code #!/bin/bash username=gnowicki sed '$s/$/ $username/' < sshd_config 1 <> sshd_config what this is supposed to do is take the name gnowicki and put it at the end of the last line of the sshd_config and it works except not using the variable, if I put the name "gnowicki" where... (2 Replies)
Discussion started by: slufoot80
2 Replies

7. Shell Programming and Scripting

awk's gsub variable in replacement

I been trying to figure out how to use element of array as a replacement pattern. This works as I expected: $ echo "one two three" | awk '{ gsub(/wo/,"_BEG_&_END_",$2); print }' one t_BEG_wo_END_ three $ echo "one two three" | awk '{ tmp="foo"; gsub(/wo/,"_BEG_" tmp "_END_",$2);... (5 Replies)
Discussion started by: mirni
5 Replies

8. Shell Programming and Scripting

Passing Bash variable to javascript

How do I pass a bash variable to a javascript? I've tried #!/bin/bash echo "Content-type: text/html" echo "" echo "<html>" echo "<head>" counter=0 echo '<script> window.parent.document.forms.counter.value = "$counter"; </script>' I have an iframe script which I am trying to pass a... (3 Replies)
Discussion started by: numele
3 Replies

9. Shell Programming and Scripting

passing variable from bash to perl from bash script

Hi All, I need to pass a variable to perl script from bash script, where in perl i am using if condition. Here is the cmd what i am using in perl FROM_DATE="06/05/2008" TO_DATE="07/05/2008" "perl -ne ' print if ( $_ >="$FROM_DATE" && $_ <= "$TO_DATE" ) ' filename" filename has... (10 Replies)
Discussion started by: arsidh
10 Replies

10. Shell Programming and Scripting

passing variable values to awk command

Hi, I have a situation where I have to specify a different value to an awk command, I beleive i have the gist of this done, however I am not able to get this correct. Here is what I have so far echo $id 065859555 This value occurs in a "pipe" delimited file in postition 8. Hence I would... (1 Reply)
Discussion started by: jerardfjay
1 Replies
Login or Register to Ask a Question