Extracting a regex with awk


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Extracting a regex with awk
# 8  
Old 05-17-2009
From the grep man page:

-o, --only-matching
Show only the part of a matching line that matches PATTERN.


In the words of the Kool-Aid guy....Ohhh-Yeeeaah!
# 9  
Old 05-17-2009
Quote:
Originally Posted by Enobarbus37
I have a regexp that I wish to match against every line of a file using awk.
But I do not want to substitute it or select the line.
I want to pull the matched text out and put it in a different file, line by line.
What is the correct awk usage to *extract* a regexp and put it in another file?
Let assume that input.txt contains the text quoted above and " w[^ ]*" is the regexp:
Code:
colemar@deb:~$ awk '{match($0," w[^ ]*",a);print a[0]}' input.txt 
 wish
 want
 want

colemar@deb:~$

If you like to avoid empty lines:
Code:
colemar@deb:~$ awk 'match($0," w[^ ]*",a){print a[0]}' input.txt 
 wish
 want
 want
colemar@deb:~$

Now suppose you want to output only a subexpression, for example you want only the piece following the initial space:
Code:
colemar@deb:~$ awk 'match($0," (w[^ ]*)",a){print a[1]}' input.txt 
wish
want
want
colemar@deb:~$

The above works with GNU awk.
Traditional awk does not allow a third argument for match() and does not support parenthesized subexpressions. Instead you have to rely on the fact that match() sets RSTART and RLENGTH:

Code:
colemar@deb:~$ awk 'match($0," w[^ ]*"){print substr($0,RSTART,RLENGTH)}' input.txt 
 wish
 want
 want
colemar@deb:~$


Last edited by colemar; 05-18-2009 at 03:43 AM..
# 10  
Old 05-18-2009
An easy way will be to count the number of times pattern is coming through grep. and use this count in a loop and paste the pattern that many times

Code:
>output
count=`grep -n "and" file | wc -l`
while [ $count -gt 0 ]
do
echo "and" >> output
count=$(($count-1))
done

# 11  
Old 05-18-2009
Thank you one and all! I have enough to keep me very busy. A great pleasure to receive your replies. Thanks again.
# 12  
Old 05-18-2009
I should add that I had overlooked the -o option to grep which is certainly the first place to start. I apologize for that total rookie error.

My excuse? I was using the "grep" facility in BBEdit which does not include extensions. Sounds bad, doesn't it?

Never underestimate the strength of the Unix Kung Fu.

Encore une fois, mes excuses.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Regex extracting location

I have location as line=/got/cpp/track/tmp/piy/p_tok.xml I need the path till tmp i.e. /got/cpp/track/tmp i tried test=${line%/)} and i am getting location till /got/cpp/track/tmp/piy Can anyone help me in correcting my regex (2 Replies)
Discussion started by: dreams619
2 Replies

2. Shell Programming and Scripting

Regex within IF statement in awk

Hello to all, I have: X="string 1-" Y="-string 2" Z="string 1-20-string 2"In the position of the number 20 could be different numbers, but I'm interest only when the number is 15, 20,45 or 70. I want to include an IF within an awk code with a regex in the following way. ... (12 Replies)
Discussion started by: Ophiuchus
12 Replies

3. Shell Programming and Scripting

wildcard in regex for awk

Hello I have a file like : 20120918000001413 | 1.17.163.89 | iSelfcare | MSISDN | N 20120918000001806 | 1.33.27.100 | iSelfcare | 5564 | N .... I want to extract all lines that have on 4th field (considering "|" the separator ) something other than just digits. I want to do this using a... (5 Replies)
Discussion started by: black_fender
5 Replies

4. Shell Programming and Scripting

awk equivalent of regex

Hi all, Can someone tell me what's the (g)awk equal of this simple regex to find ip addresses in urls: egrep "^http://{1,3}\.{1,3}\.{1,3}\.{1,3}(:{1,5})?/"Input: http://10.0.0.1/query.exe http://11y10x09w:80/howaboutme http://192.168.100.190:1234/takeme.gpg Output:... (8 Replies)
Discussion started by: r4v3n
8 Replies

5. UNIX for Dummies Questions & Answers

Using AWK and regex

Hi can you suggest in this regard The sample.txt conatins the data name lines type sam 12 txt sam 24 xls sam 36 pdf ram 32 txt ram 45 sxls ram 58 word sam 92 jpeg sam 21 gif sam 22 ltf from the data i need to sum all line... (5 Replies)
Discussion started by: krashraj
5 Replies

6. Shell Programming and Scripting

awk regex problem

hi everyone suppose my input file is ABC-12345 ABCD-12345 BCD-123456 i want to search the specific pattern which looks like - in a file so i used this command cat $file | awk ' { if ($0 ~ /-/) { print } }' so it gives me the result as ABCD-12345 BCD-12345 BCD-12345 ... (31 Replies)
Discussion started by: aishsimplesweet
31 Replies

7. Shell Programming and Scripting

awk variables in regex expression ?

Hello, Could someone explain why this one returns nothing: $ x=/jon/ $ echo jon | awk -v xa=$x '$1~xa {print}' $ while the following works fine: $ x=jon $ echo jon | awk -v xa=$x '$1==xa {print}' $ jon and the following works fine: $ echo jon | awk '$1~/jon/ {print}' $ jon ... (3 Replies)
Discussion started by: vilius
3 Replies

8. Shell Programming and Scripting

AWK regex to find only numbers

Hi guys I need to find both negative and positive numbers from the following text file. And i also dont need 0. 0 8 -7 -2268 007 -07 -00 -0a0 0a0 -07a0 7a00 0a0 Can someone please give a regex to filter out the values in red. I tried a few things in awk but it didnt work... (9 Replies)
Discussion started by: sridanu
9 Replies

9. Shell Programming and Scripting

awk or regex

Hi! I want to made a program that will generate code like this: {{Navedi XYZ |avtor=XYZ1 |naslov=XYZ2 |leto_izzida=XYZ3 |zalozba=XYZ4 |kraj=XYZ5 |isbn=XYZ6 |cobiss_id=XYZ7 }} from input like this: <b> ODGOVORNOST............. : <a... (5 Replies)
Discussion started by: smihael
5 Replies

10. Shell Programming and Scripting

sed, grep, awk, regex -- extracting a matched substring from a file/string

Ok, I'm stumped and can't seem to find relevant info. (I'm not even sure, I might have asked something similar before.): I'm trying to use shell scripting/UNIX commands to extract URLs from a fairly large web page, with a view to ultimately wrapping this in PHP with exec() and including the... (2 Replies)
Discussion started by: ropers
2 Replies
Login or Register to Ask a Question