Dynamic regular expression in nawk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Dynamic regular expression in nawk
# 1  
Old 08-09-2010
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: -
Code:
 if ( "my string of regex's" )

Thanks
# 2  
Old 08-09-2010
Can you give more information what you are trying to achieve?
# 3  
Old 08-09-2010
Hi Franklin

I can now, my computer at work can't seem to handle this site.

I have a very inefficient script that is looking at files full of ps output, 1 file for each server on the logical network. It is parsing a config file that contains entries pertaining to each process being monitored, between two and five lines of config per process.

I need to read in the entries from the config file containing patterns to match in the ps output, such as user, name of process, args etc.

So depending on how many args to match there are in the config file I need to create a regular expression to test or match or equal the patterns in the ps output.

So for one entry i may need to match two items and equal a string for example, the next I will need to build an expression that is different.

What would be most convenient would be to create the test in the if statement as a string and somehow eval it.

So if I could do something like: -

Code:
regex = "$0 ~ /name/"
if ( regex )
do something

So my question is "is that possible in awk"?
# 4  
Old 08-09-2010
FWIK it isn't possible to load code dynamically with awk.

Regards
# 5  
Old 08-09-2010
Quote:
Originally Posted by steadyonabix
So if I could do something like: -

Code:
regex = "$0 ~ /name/"
if ( regex )
do something

So my question is "is that possible in awk"?
It is possible and common, but your code is incorrect. In your example, the if condition will evaluate to true if the value of regex is any non-null string. What you want is:
Code:
regex="name"
if ($0 ~ regex)
    do something

# 6  
Old 08-09-2010
Thanks guys but I need to create multiple tests that are combinations of ~ and == tests

Guess I'll have to come up with a different approach

Thanks
# 7  
Old 08-09-2010
An array of strings can represent the tests that need to succeed and a for loop can be used to iterate over that list. == can be simulated with ~ using an anchored expression without (or with escaped) metacharacters. Depending on whether the expressions themselves are dynamic or hardcoded, this may or may not be trivial.

As with all help requests, some actual examples or your current script would've been more informative than your textual descriptions.

Good luck,
Alister
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

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... (4 Replies)
Discussion started by: kchinnam
4 Replies

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

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

Perl regular expression - To match a Dynamic URL

Hello All, I have a requirement to match a dynamic url and extract each of the directory and page and store it -Only PERL style Regular EXP as it will be used in informatica - REG_EXTRACT function Example Input URLs: 1)... (2 Replies)
Discussion started by: jambesh
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

Help with NAWK regular expressions

I've a file $ cat size 1234 5678 vamsi I want to match the lines which has just 4 digits and nothing else. So $ cat size | nawk ' $0 ~ // {print}' 1234 5678 But when I use the repetition clause it doesn't work cat size | nawk ' $0 ~ /{4}/ {print}' I actually want to filter out the... (8 Replies)
Discussion started by: vamsi.coe
8 Replies

8. Linux

Regular expression to extract "y" from "abc/x.y.z" .... i need regular expression

Regular expression to extract "y" from "abc/x.y.z" (2 Replies)
Discussion started by: rag84dec
2 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