shell variable in awk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting shell variable in awk
# 1  
Old 08-19-2007
shell variable in awk

Hi All,

How can i use the file for printing in awk

file1
----------
update table crn_ras_disc_dtl a set a.a5=$1,a.a1=$2,a.a2=$3,a.a3=$4,a.a4=$5;

file2
--------
10|KUMAR|23|MALE|US
20|RAJ|24|MALE|AU

Output
---------
update table crn_ras_disc_dtl a set a.a5=10,a.a1=KUMAR,a.a2=23,a.a3=MALE,a.a4=US;
update table crn_ras_disc_dtl a set a.a5=20,a.a1=RAJ,a.a2=24,a.a3=MALE,a.a4=AU;
# 2  
Old 08-19-2007
Code:
awk -F'|' '
   BEGIN { getline in_stmt < "file1"; }
   {
     nVars=split($0, values);
     out_stmt=in_stmt;
     for (i=1; i<=nVars; i++) {
        gsub("\\$" i, values[i], out_stmt);
     }
     print(out_stmt);
   }
' file2

# 3  
Old 08-20-2007
Not working properly.

Hi robotronic,

Thanks for your script.There is a problem in the script.
Eg:
If i try to two digit number field
(For Eg:$20 in the file 1.Iam getting the value as $2"1") ,iam getting the wrong result.

regards,
cskumar
# 4  
Old 08-20-2007
Any alternative solution.

Hi All,

I got the solution by reversing the for loop.

for (i =nVars; i>=1; i--)

For each record looping is done for number of fields.Currently i have 92 fields for file2.

If I am looping for 92 times,wont my performance decreases.Cant i have any alternative solution.

Please help me.

regards,
cskumar.
# 5  
Old 08-20-2007
i think you have a design issue. I find it easier to construct the statement on the fly.
If need be you can pipe to output file.
Code:
awk 'BEGIN{FS="|"}
{ cmd = "update table crn_ras_disc_dtl a set a.a5="$1",a.a1="$2",a.a2="$3",a.a3="$4",a.a4="$5";"
  print cmd ## > "file"
  ## whatever you want to do with cmd
}
' "file2"

# 6  
Old 08-20-2007
If you don't have multiple occurrences of the same variable "$n" in file1, you can substitute the "gsub" command with "sub": this may increase performances a bit. Note that, in this manner, the original increasing for loop works well too.
Otherwise, as stated by ghostdog, you'll have to hardcode the update statement in the awk script.
# 7  
Old 08-20-2007
awk

Hi, try this one( i use solaris)

Code:
while read line
do
cat file2 | nawk  'BEGIN{FS="|"}
{
l="'"$line"'"
gsub(/\$1/,$1,l)
gsub(/\$5/,$5,l)
gsub(/\$4/,$4,l)
gsub(/\$3/,$3,l)
gsub(/\$2/,$2,l)
print l
}'
done < file1

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

How can I assign awk's variable to shell script's variable?

I have the following script, and I want to assign the output ($10 and $5) from awk to N and L: grdinfo data.grd | awk '{print $10,$5}'| read N L output from gridinfo data.grd is: data.grd 50 100 41 82 -2796 6944 0.016 0.016 3001 2461. where N and L is suppose to be 3001 and 100. I use... (8 Replies)
Discussion started by: geomarine
8 Replies

2. Shell Programming and Scripting

Shell variable expansion in awk

I want to split one file input.tab into two separate ones, odd lines to input_reads1.txt, even lines to input_reads2.txt for a serial of files with similar name pattern. Also I want to "match" input/output file names to keep consistency of file name: CSEL_02.0_input.tab CSEL_03.4_input.tab... (2 Replies)
Discussion started by: yifangt
2 Replies

3. Shell Programming and Scripting

Awk: How to get an awk variable out to the shell, using system() ?

I am reasonably capable with awk and its quirks, but not with shell weirdness. This has to be Bourne Shell for portability reasons. I have an awk program that is working just fine; it handles multiple input streams and produces several reports, based on the request (-v Variables). In addition... (3 Replies)
Discussion started by: DerekAsirvadem
3 Replies

4. Shell Programming and Scripting

How to use shell variable in awk?

How do you use a shell variable in awk? I am using Solaris 10 and don't have GNU products installed. File (transportation.txt) contents: car boat airplane snowmobile bicycle sled This awk statment works (prints from the car line down to bicycle awk '/car/,/bicycle/'... (8 Replies)
Discussion started by: thibodc
8 Replies

5. Shell Programming and Scripting

use shell variable in awk command

Trying to do something like this ls -lrt | awk '$9=="test5"' -rw-r--r-- 1 lrmq db2iadm1 381 Sep 20 21:56 test5 But now, I need to give a variable in place of test5. For example let's define x as test5 x=test5 ls -lrt | awk '$9=="$x"' This doesn't seem to be working. It doesn't take the... (4 Replies)
Discussion started by: blazer789
4 Replies

6. Shell Programming and Scripting

Shell variable in awk

I have 3 files and each contain m*n matrix. m = number of rows (horizontal lines) n = number of columns (entries in a particular line) What I wish to find is the sum of the 2nd number in the last row. Ex file1.dat 2 5 8 8 4 6 7 8 3 8 3 7 file2.dat 3 4 1 4 8 4 0 3 4 7 3 7 ... (3 Replies)
Discussion started by: dynamics
3 Replies

7. Shell Programming and Scripting

How to change awk and shell variable value?

In awk script, #!/bin/sh awk 'BEGIN{i=0;}{i=i+5;}END{print i}' in.txt vr=0; vr=$i; echo "$vr" How can i assign that value of i in $vr(variable) of shell script? (7 Replies)
Discussion started by: cola
7 Replies

8. Shell Programming and Scripting

assign awk's variable to shell script's variable?

Dear All, we have a command output which looks like : Total 200 queues in 30000 Kbytes and we're going to get "200" and "30000" for further process. currently, i'm using : numA=echo $OUTPUT | awk '{print $2}' numB=echo $OUTPUT | awk '{print $5}' my question is : can I use just one... (4 Replies)
Discussion started by: tiger2000
4 Replies

9. Shell Programming and Scripting

Return Awk Variable to Shell

I'm a bit stuck in getting variable from awk to shell. I tried searching but most of them showing to assign to shell variable via.. VAR=`echo $line | awk -F: '{print $1}'` which is correct ofcourse My problem is multiple assignments of variable like this one. The above solution will give... (10 Replies)
Discussion started by: ryandegreat25
10 Replies

10. Shell Programming and Scripting

Shell variable with awk

line_no=6 echo 'Phone,' `awk 'NR==$line_no{print;exit}' <filename>` what is the error in this.. it says.. awk: Field $() is not correct. The input line number is 1. The file is <filename>. The source line number is 1. i want to print the data in the $line_no line of a certain... (2 Replies)
Discussion started by: St.Fartatric
2 Replies
Login or Register to Ask a Question