Passing regular expression to nawk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Passing regular expression to nawk
# 1  
Old 07-17-2013
Passing regular expression to nawk

I am trying to test if I can replace a regular expression in 'nawk' with a variable.
Please let me know why it is not working. I am using ksh88i on solaris8
I am trying use this test as a building block to filter active external DNS connections.

Ideally I want to pass variable defined outside nawk as an argument to it.

Code:
# Here I am printing only DNS names.
$> echo server1.domain1.domain2.com  | nawk '/^[a-z0-9]*\.[a-z0-9]*\.[a-z0-9]*\.[a-z0-9]*/{print}'
server1.domain1.domain2.com 

# Here I am trying to pass same pattern as a variable, its not working.
$>echo server1.domain1.domain2.com | nawk -v re='^[a-z0-9]*\.[a-z0-9]*\.[a-z0-9]*\.[a-z0-9]*' '/re/{print}'


Last edited by kchinnam; 07-17-2013 at 01:45 AM.. Reason: typo
# 2  
Old 07-17-2013
below might work with some warnings..

Code:
 
tools>  echo server1.domain1.domain2.com | awk -v "re=^[a-z0-9]*\.[a-z0-9]*\.[a-z0-9]*\.[a-z0-9]*" '$0 ~ re{print}'
awk: warning: escape sequence `\.' treated as plain `.'
server1.domain1.domain2.com

# 3  
Old 07-17-2013
Slight modification still:
Code:
echo "server1.domain1.domain2.com" | awk -v re='^[a-z0-9]*\\.[a-z0-9]*\\.[a-z0-9]*\\.[a-z0-9]*$' '$0~re{print}''

--
@viyadhar: the back slashes need to be escaped within single quotes otherwise the regex in the string will match anything (the dots will not be interpreted as literal dots).
@kchinnam: you probably need a $-sign at the end as well?

Last edited by Scrutinizer; 07-17-2013 at 02:19 AM..
# 4  
Old 07-17-2013
My question is really using 'nawk' I am able to get the first command working, but not the second one with parameter, what am I doing wrong?

Code:
$> echo server1.domain1.domain2.com | nawk '/^[a-z0-9]*\.[a-z0-9]*\.[a-z0-9]*\.[a-z0-9]*/ {print}'
server1.domain1.domain2.com

$>echo server1.domain1.domain2.com | nawk -v re='^[a-z0-9]*\.[a-z0-9]*\.[a-z0-9]*\.[a-z0-9]*' '/re/ {print}'
<nothing gets printed>

# 5  
Old 07-17-2013
Within awk you can use a so-called regex constant / regex /{print} or $0 ~ / regex / {print } but a regex constant cannot contain a variable.

If you want to use a variable you need to put the regex in a string and use the regex matching operator ~ ( $0 ~ " regex "{print} )

So it becomes -v re='regex' ' .... $0 ~ re {print }. But this means the backslashes do need to be escaped, because the string needs to be evaluated first before it can be interpreted as a regex, hence the double backslashes in my previous example ( in a string you need to use \\ is you want to print \ ).

Last edited by Scrutinizer; 07-17-2013 at 06:37 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

sed: -e expression #1, char 0: no previous regular expression

Hello All, I'm trying to extract the lines between two consecutive elements of an array from a file. My array looks like: problem_arr=(PRS111 PRS213 PRS234) j=0 while } ] do k=`expr $j + 1` sed -n "/${problem_arr}/,/${problem_arr}/p" problemid.txt ---some operation goes... (11 Replies)
Discussion started by: InduInduIndu
11 Replies

2. Shell Programming and Scripting

passing a regex as variable to awk and using that as regular expression for search

Hi All, I have a sftp session log where I am transferring multi files by issuing "mput abc*.dat". The contents of the logfile is below - ################################################# Connecting to 10.75.112.194... Changing to: /home/dasd9x/testing1 sftp> mput abc*.dat Uploading... (7 Replies)
Discussion started by: k_bijitesh
7 Replies

3. Programming

Perl: How to read from a file, do regular expression and then replace the found regular expression

Hi all, How am I read a file, find the match regular expression and overwrite to the same files. open DESTINATION_FILE, "<tmptravl.dat" or die "tmptravl.dat"; open NEW_DESTINATION_FILE, ">new_tmptravl.dat" or die "new_tmptravl.dat"; while (<DESTINATION_FILE>) { # print... (1 Reply)
Discussion started by: jessy83
1 Replies

4. Shell Programming and Scripting

nawk and regular expression

I have an input file which looks like the example below and I want to format it with 2 columns from the header based on the word "CUSIP" followed by a 9 digit string with first 3 being numeric and in the same line NNN.NN% pattern for the percentage value. (In RED) I started of with nawk but... (12 Replies)
Discussion started by: ejazsyed
12 Replies

5. Shell Programming and Scripting

Passing in regular expression as a parameter to sed

Hi All, Im using Bash. I have a pipe delimited config file which contains 3 columns, 1st column = location of a file to be chnaged 2 column = expression to find within file 3rd column = string to replace. A script will loop through the contetnts of this file and apply the changes using... (2 Replies)
Discussion started by: satnamx
2 Replies

6. Shell Programming and Scripting

Integer expression expected: with regular expression

CA_RELEASE has a value of 6. I need to check if that this is a numeric value. if not error. source $CA_VERSION_DATA if * ] then echo "CA_RELESE $CA_RELEASE is invalid" exit -1 fi + source /etc/ncgl/ca_version_data ++ CA_PRODUCT_ID=samxts ++ CA_RELEASE=6 ++ CA_WEEK_NO=7 ++... (3 Replies)
Discussion started by: ketkee1985
3 Replies

7. Shell Programming and Scripting

Passing Variable to Regular Expression

Hi All, Below is a sample code: print "Enter the Name: "; my $Name = <>; print "Word is $Name"; open (FH,"AIDNameList.txt"); while (<FH>) { my $line; print "Word is $Name"; for $line(<FH>)... (12 Replies)
Discussion started by: jisha
12 Replies

8. Shell Programming and Scripting

Dynamic regular expression in nawk

Hi FolksI want to write a nawk script that dynamically creates variable numbers of regular expressions on the fly rather than using constants. Is this possible?They would need to be used within an if statement within the nawk program: - if ( "my string of regex's" ) Thanks (7 Replies)
Discussion started by: steadyonabix
7 Replies

9. Shell Programming and Scripting

nawk empty regular expression error

Hello, All. please help me with this problem. i need to use variable as regular expression. some thing like this: BEGIN { RS="\n"; ORS="\n"; reg_exp = ".+Dec.+"; # i mean that regular expression is any symbol before "Dec" and any symbol after it. For example <Worksheet... (6 Replies)
Discussion started by: Rjkz
6 Replies

10. Shell Programming and Scripting

Regular Expression + Aritmetical Expression

Is it possible to combine a regular expression with a aritmetical expression? For example, taking a 8-numbers caracter sequece and casting each output of a grep, comparing to a constant. THX! (2 Replies)
Discussion started by: Z0mby
2 Replies
Login or Register to Ask a Question