Variable in awk command


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Variable in awk command
# 1  
Old 03-05-2017
Variable in awk command

Hello All,

I am trying to run a script to extract data from the file. The format of the file is as below:
filename: sample.log

Code:
12345| ABCD
23456| GKHY
33454| ABCD
98765| TTRR

I want to run a command in AWK as show below

extract.sh

Code:
#!/bin/bash

echo '***************************************************'
echo ' '
file_name='sample.log'

reqd_str=$1

str_list=${reqd_str}'_extracted_on_'$(date  +'%Y%m%d-%H%M%S').'log'

#Below doesn't work#

awk 'BEGIN { FS ="|" }{ if ( $2 ~ /$reqd_str/ ) print $1 > $str_list}'  file_name

# Below AWK command does work #
#awk 'BEGIN { FS ="|" }{ if ( $2 ~ /ABCD/ ) print $1 > "output.txt"}'  sample.log

i will be executing file in below way

Code:
/> ./extract.sh ABCD

So the above executing should bring me back below result in an output file
Code:
12345
33454

I am happy to replace AWK with some other command as long as it serve the purpose. Basically i was script to extract ABCD i.e. field 2 and extract field 1.
Moderator's Comments:
Mod Comment With all of the posts that we have fixed for you, you should know by now that CODE tags should be used when displaying sample input and output as well as code segments.

Please help the moderators, the volunteers here trying to understand what you're doing, and yourself by taking a little more care properly formatting your posts.

Last edited by chetanojha; 03-05-2017 at 02:48 PM.. Reason: Add CODE and ICODE tags.
# 2  
Old 03-05-2017
The single quotes prevent the shell variables from being expanded. A better method is to use awk variables and pass shell variables to them using the -v option:

Try something like this:
Code:
awk -v regd_str="$reqd_str" -v str_list="$str_list" 'BEGIN { FS ="|" }{ if ( $2 ~ regd_str ) print $1 > str_list}' file_name

You can also use shell redirection, like so:
Code:
awk -v regd_str="$reqd_str" 'BEGIN { FS ="|" }{ if ( $2 ~ regd_str ) print $1 }' file_name > "$str_list"

Instead of the BEGIN section , one could also use the -F option:
Code:
awk -F \| -v regd_str="$reqd_str" '{ if ( $2 ~ regd_str ) print $1 }' file_name > "$str_list"

And one could also make use of the condition { action } structure of awk..:
Code:
awk -F \| -v regd_str="$reqd_str" '$2 ~ regd_str { print $1 }' file_name > "$str_list"


Last edited by Scrutinizer; 03-05-2017 at 02:57 PM..
This User Gave Thanks to Scrutinizer For This Post:
# 3  
Old 03-05-2017
Can't believe i wasted whole day to figure it out. Thanks a lot
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Storing awk command in a variable

I'm working on a script in which gives certain details in its output depending on user-specified options. So, what I'd like to do is something like: if then awkcmd='some_awk_command' else awkcmd='some_other_awk_command' fi Then, later in the script, we'd do something like: ... (5 Replies)
Discussion started by: treesloth
5 Replies

2. Shell Programming and Scripting

Using variable in awk command

Have a small doubt . While using an iterator , i need to take the fields as seen as below . But the Iterator is not been displayed . Can you please help with this . Code: ITERATOR=0COUNT=`cat test.txt`echo "$COUNT" while do echo $ITERATOR echo "$COUNT" awk... (3 Replies)
Discussion started by: Ravi_Teja
3 Replies

3. UNIX for Dummies Questions & Answers

Using a variable in the awk command

Hi Guys, Can anyone of you please tell me how to use a variable inside a awk command. For ex - if am printing the third column with respect to a pattern with delimiter ~ awk -F~ '$3=="pattern"' <file name> - This works, Now here I have a set of patterns in a file and I want to put it in... (1 Reply)
Discussion started by: abhisheksunkari
1 Replies

4. Shell Programming and Scripting

Variable in AWK command help

here is what i have so far delim=`cat $HOME/tmp/interchange_hold | head -1 | cut -b4` cat $HOME/tmp/rawfile_hold | ( while read line se_check=`echo $line | awk -F: -v awkvar="$delim" '{ print $1}'` delim will hold the 4th char of a file. Lets say that char is a * the line im... (2 Replies)
Discussion started by: blesjt02
2 Replies

5. Shell Programming and Scripting

Variable as input to awk command

Hi Gurus, I need a suggestion, please help. I have a input file as below : abc.txt : * xxxx: 00000 xxxxx: 00000 xxxx: RANDOM xxx: RANDOM **************************xxxxxxx*** * abc ****************************** abc: abc: ... (3 Replies)
Discussion started by: arunshankar.c
3 Replies

6. 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

7. Shell Programming and Scripting

Problem with Variable and AWK command

Okay, so I am trying to use a count variable to reference the column of output sent from an echo statement. So I am trying to do this #!/bin/bash CURRENT=$PWD VAR=3 CHANGE=`echo $CURRENT | awk -F "/" '{ print \$$VAR }'` This instead of giving me the third instance after the "/" gives... (4 Replies)
Discussion started by: mkjp2011
4 Replies

8. Shell Programming and Scripting

How to use same variable value inside as well as outside of the awk command?

Hi Jim, The following script is in working state. But i m having one more problem with awk cmd. Could you tell me how to use any variable inside awk or how to take any variable value outside awk. My problem is i want to maintain one property file in which i am declaring variable value into that... (12 Replies)
Discussion started by: Ganesh Khandare
12 Replies

9. Shell Programming and Scripting

Execution of awk command in a variable

Hi All, I have a awk command that is stored in a variable. the value of the variable cmd is: (mean output of echo $cmd is: ) awk -F";" '{print $1}' Now I want to execute this command. How can I do that???? Quick Reply will be appreciated. Regards, Amit (2 Replies)
Discussion started by: patelamit009
2 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