If conditions in awk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting If conditions in awk
# 1  
Old 01-17-2013
If conditions in awk

Hello Friends,

I need to find some CDRs in production servers whose 1st field value and 2nd field value = 1 and 11th looks like 45.123... where there are more than 3 digits after comma.so i wrote a one liner, something like below but does not work, however when i used first and second conditions it worked:

Code:
for file in `find . -type f -name "*.txt" -mtime -30 2>/dev/null`; do nawk -F\| '{if (($1==1) && ($2==1) && ($11~[0-9]*\.[0-9][0-9][0-9]*)) print $0}' $file; done

Code:
nawk: syntax error at source line 1
 context is
        {if (($1==1) && ($2==1) && >>>  ($11~[ <<< 
nawk: illegal statement at source line 1

Any suggestions, corrections welcome.

I couldnt find any other way to achieve this rather than awk..

Thanks in advance,
my best regards
# 2  
Old 01-17-2013
Hi.

~ is expecting a regular expression, which should be between /.../

Code:
[root@wiki ~]# echo 123 | awk '$1 ~ /.[0-9]./'
123
[root@wiki ~]# echo abc | awk '$1 ~ /.[0-9]./'
[root@wiki ~]#

# 3  
Old 01-17-2013
Quote:
Originally Posted by Scott
~ is expecting a regular expression, which should be between /.../

Code:
[root@wiki ~]# echo 123 | awk '$1 ~ /.[0-9]./'
123
[root@wiki ~]# echo abc | awk '$1 ~ /.[0-9]./'
[root@wiki ~]#

I have just realised this and tried q min ago, but it didnt give me correct output:


Code:
nawk -F\| '{if ((($1==1) && ($2==1)) && ($11~/[0-9]*\.[0-9][0-9][0-9]*/)) print $0}' $file

in output the 11th field has all values like 12.34 rather than 12.345.....
Code:
1|1|1|sscmws-5400609|9840001131523171327|||20130113152317|scr|ccn-r|7.83|||3|784|3|7.83|971507857285|0|360||2|||CCN1|0
1|1|1|sscmws-5400611|9840001131524001329|||20130113152400|scr|ccn-r|5.48|||3|784|3|5.48|971509420582|0|360||2|||CCN1|0
.
.

should i put one more [0-9] ?? Smilie
# 4  
Old 01-17-2013
Replace the * with a +. Try:
Code:
awk -F\| '$1==1 && $2==1 && $11~/\.[0-9][0-9][0-9]+/' infile "$file"

or
Code:
awk -F\| '$1==1 && $2==1 && $11~/\.[0-9]{3,}/' infile

The latter will not work with mawk and needs the --posix option with gawk (if <4.0)
This User Gave Thanks to Scrutinizer For This Post:
# 5  
Old 01-17-2013
Quote:
Originally Posted by Scrutinizer
[...]
Code:
awk -F\| '$1==1 && $2==1 && $11~/\.[0-9]{3,}/' infile

The latter will not work with mawk and needs the --posix option with gawk (if <4.0)
Or use --re-interval, if you want to enable just that feature and if you don't want to disable all GNU awk extensions and those not allowed by POSIX.
This User Gave Thanks to radoulov For This Post:
# 6  
Old 01-17-2013
Quote:
Originally Posted by Scrutinizer
Replace the * with a +. Try:
Code:
awk -F\| '$1==1 && $2==1 && $11~/\.[0-9][0-9][0-9]+/' infile "$file"

or
Code:
awk -F\| '$1==1 && $2==1 && $11~/\.[0-9]{3,}/' infile

The latter will not work with mawk and needs the --posix option with gawk (if <4.0)
Thanks Scrutinizer as you remind me how to use combinations of {3} ..

I need something else, on another directory form of some warning CDRs is a bit different, the last field so i need to check sub fields of last field of CDRs and print them,
Code:
here a sample of CDR:
1|1|1|sscmws-5400746|9840001141031191292|||20130114103119|scr|ccn-r|43.98||ratedPrice and chargedAmount are different. rp:43.98 ca:43.980000000000004

i tried this but didnt work:

Code:
for file in `find . -type f -name "*.txt" -mtime -30 2>/dev/null`; 
do nawk -F\| '{split($NF,arr,":"); if ((arr[2+0]~/\.[0-9]{3,}/) || (arr[3]~/\.[0-9]{3,}/)) print $0}' $file; 
done

I could not parse only numerical part of second array adding "+0" and so i cant check second arrays which is "43.98" in sample,
# 7  
Old 01-17-2013
Code:
for file in `find . -type f -name "*.txt" -mtime -30 2>/dev/null`
do 
  nawk -F\| '$NF ~ /.*:[0-9][0-9]*[.][0-9][0-9]$/'' $file
done

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Sequence of conditions awk

hello gurus, I want to use an associative array from a file to populate a field of another file, by matching several columns in order of priority. If the first column matches, then i dont want to match $2. Similarly I only want to match $3 when $1 and $2 are not in associative array. For the... (6 Replies)
Discussion started by: ritakadm
6 Replies

2. Shell Programming and Scripting

awk problems - awk ignores conditions

awk 'BEGIN{ if('"$CATE"'<'"${WARN}"') printf ("%s", "'"`Kfunc "" ; break`"'") else if (('"${CATE}"'>='"${WARN}"') && ('"${CATE}"'<'"${CRIT}"')) printf ("%s", "'"`Wfunc ""; break`"'") else if ('"${CATE}"'>='"${CRIT}"') printf... (6 Replies)
Discussion started by: SkySmart
6 Replies

3. Shell Programming and Scripting

awk three conditions

I'm having a problem pulling UID's from data. The data outputs a user's UID in one of three ways: 1. Error User user_name already assigned with <UID> 2. Success <UID> reserved for user_name 3. <a load of crap because there was a db failure yet somehow the UID is still in there> I typically... (5 Replies)
Discussion started by: MaindotC
5 Replies

4. Shell Programming and Scripting

awk with conditions

Hi All, I have a file with below contents. "en2"/10.185.81.0:cluster_interconnect,"en5"/10.185.81.0:cluster_interconnect,"en6"/169.181.146.0:public I want to take the interface name from the file and convert it as ipaddress using ifconfig command get the output like below en6 ->... (2 Replies)
Discussion started by: kamauv234
2 Replies

5. Shell Programming and Scripting

Conditions in awk

Hi there, here is my command ssh host.local "/path/to/my/perscript/hostconfig.pl -s $HOST -d |awk '{if (\$4 > 120)print \"My error message\";exit}{s=0; for (i=1; i<=NF; i++) s++; if(s == 13) print \$3}'" The problem is if conditional 1 is met (i.e $4 > 120), i don't see "My error message", the... (5 Replies)
Discussion started by: urello
5 Replies

6. Shell Programming and Scripting

Checking conditions with AWK

Input File1 0BB2 2A11 Split,FriApr80625,1507_7RAID5 0BF6 2829 Synchronized,FriJan140653,1507_7RAID5 0BF6 282A Split,FriApr80625,1507_7RAID5 0C7C 199E Synchronized,FriJan140653,1507_7RAID5 0C7C 1BCC Split,FriApr80625,1507_7RAID5 0DCA 0A9B ... (12 Replies)
Discussion started by: greycells
12 Replies

7. Shell Programming and Scripting

awk line with two conditions

Hi there, I wanna define a variable 'tempbase'. Therefore I read a text file "base.out". "base.out" contains a list with four columns. 'tempbase' is the 4th entry in the line, where the first entry is equal to the predefined variable $orb1 and the second entry is equal to $orb2. I wrote the code... (2 Replies)
Discussion started by: friend
2 Replies

8. Shell Programming and Scripting

awk with two conditions

Hi Everyone, # cat 1 1;2;3;4;5;6 1;2;3;4;5; # awk -F ";" '$5 == "5"' 1 1;2;3;4;5;6 1;2;3;4;5; but the output is should be just "1;2;3;4;5;6" means 1st condition: $5 is 5; 2nd condition: $6 is not empty, please advice. Thanks (2 Replies)
Discussion started by: jimmy_y
2 Replies

9. Shell Programming and Scripting

if, sed or awk with conditions

I do not know how to do this unless I use a bunch of if statements. I need a script to replace numbers in each record in a file. I am really getting tangled in this web. If a fieldA (19 positions) is greater than 14 digits, I have to change the data (resulting fieldA is fixed 19 postions). If... (5 Replies)
Discussion started by: ski
5 Replies

10. Shell Programming and Scripting

About awk conditions

Hello, Can you explain why in the first 2 commands the awk does not print anything? Is it looking of a specific format ? Thanks. $ echo 12a3 | awk '($1>=2) {print $1}' # prints nothing $ echo 123a | awk '($1>=2) {print $1}' # prints nothing $ echo a123 | awk '($1>=2) {print $1}' a123... (1 Reply)
Discussion started by: majormark
1 Replies
Login or Register to Ask a Question