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
# 8  
Old 12-09-2011
Quote:
Originally Posted by ni2
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

Output
Code:
bar

does it work your end?

once again it works in my TEST directory, but not the real thing. Checked all variables this time...
# 9  
Old 12-09-2011
Using
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

Code:
$bash test.sh
Enter Username
Carl
Field
3
Carl foo bar

Code:
$less FILENAME
Richard:foo:foo
Sam:foo:foo
Carl:foo:foo

Moving on to your other request. What you posted should also work. But it would replace *all* occurrances of data with newdata in that record. Using sub will replace the first occurance of that data with newdata in that record.
Code:
read data
read newdata

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

# 10  
Old 12-09-2011
Quote:
Originally Posted by Nostyx
Thanks for the help but that doesn't produce any output for me.
Double check, my suggestion definitely works. This script:
Code:
#!/bin/bash

cat >FILENAME <<%
Quote:
Richard:foo
Sam:foo
Carl:foo
Bug:foo Richard
%

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

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

produces this output:
Code:
+ Username=Richard
+ awk -F: '/^Richard:/ {gsub(/foo/,"bar", $2); print}' FILENAME
Richard bar
+ awk -F: -v var=Richard '$0 ~ var {gsub(/foo/,"bar",$2); print}' FILENAME
Richard bar
Bug bar Richard

There is extra line which doesn't match the requirement with the second awk oneliner.
Quote:
do you not have to -v and assign the shell variable as an awk variable before using it with an awk command?
You have to indeed. My point is you might just don't need an awk variable in the first place, especially if you use it only once.
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