Visit Our UNIX and Linux User Community


help extracting a matching pattern and next lines of match


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting help extracting a matching pattern and next lines of match
# 1  
Old 09-11-2009
Error help extracting a matching pattern and next lines of match

Hi there,

i'm having some problems just making an awk script (i've tried this way, but other way can be posible for sure), for the next file

file.txt

<register>
<createProfile>
<result>0</result>
<description><![CDATA[OK]]></description>
<msisdn>34661461174</msisdn>
<inputOmvID>1</inputOmvID>
<inputGroupID>-2</inputGroupID>
<ProfileOmvID>1</ProfileOmvID>
<contentID>3365</contentID>
<contentProfileID>3525</contentProfileID>
<chargingProfileTypeId>22</chargingProfileTypeId>
<operationID>201022</operationID>
...

i have to test if <createProfile> is in the file. If it does, then i have to extract the lines

<msisdn>34661461174</msisdn>

and <contentProfileID>3525</contentProfileID>

so i've tried staring with something like this

> awk '/^<createProfile>/{getline;print}' file.txt

but this only print the next line to the matching pattern <createProfile>.

With this script

> awk '/^<createProfile>/ {print NR,$0}' file.txt

i get the line where he regex matches, bu i don't know how to go on to print the registers for <msisdn>34661461174</msisdn> and <contentProfileID>3525</contentProfileID>

The file is always this way of structure, i mean all the tags are in the same position if the first matching pattern is matched.

Thank you for any help Smilie
# 2  
Old 09-11-2009
Hi,

Are these lines always present on the same line number.

Cheers,
Shazin
# 3  
Old 09-11-2009
Hi Shazin, thanks for the answer Smilie

Yes, the lines (if matches the first pattern of <createProfile>), are always in the same position and line number of +3 and +8 from the matching pattern Smilie
# 4  
Old 09-11-2009
Try this:

Code:
awk '
/createProfile/{f=1}
f && /msisdn/
f && /contentProfileID/
' file

# 5  
Old 09-11-2009
Pretty cool Franklin52 , that's the way i need the script Smilie

I think that i have to go on with this kind of structure, can you please give me some URLs or references to learn more about this scripts (about the f using) Smilie

Thanks once again Smilie

As i try to understand, the line

/createProfile/{f=1}

makes the first match and if true asigns f=1

the line

f && /msisdn/

makes the second match if the very first if done (if f=1)

and the third line

f && /contentProfileID/

makes the last match if the very first if done too (if f=1)

so, now the question... where is the magic of printing the result?

Last edited by vicious; 09-11-2009 at 04:51 AM..
# 6  
Old 09-11-2009
There's no magic in it, the lines that aren't between braces are evaluated by awk and if they're true awk prints the current line per default.

Regards
# 7  
Old 09-11-2009
thank you for the explanation Franklin52, much more clear now Smilie

best wishes Smilie

---------- Post updated at 11:46 AM ---------- Previous update was at 10:20 AM ----------

As a completion of the script, i've also checked that if there are more than one match of the first pattern (various sets of same code with different values), the script must be modified like

#!/bin/bash

awk '
/createProfile/{f=1}
f && /createProfile/
f && /msisdn/
f && /contentProfileID/
' file.txt


So this will print every set of 3 lines, including the 1st, 2nd and 3rd pattern for every single match of that set in the file Smilie

Thanks once again for the help Smilie

Previous Thread | Next Thread
Test Your Knowledge in Computers #446
Difficulty: Medium
The Large Hadron Collider experiments at CERN run on Scientific Linux.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Sed: printing lines AFTER pattern matching EXCLUDING the line containing the pattern

'Hi I'm using the following code to extract the lines(and redirect them to a txt file) after the pattern match. But the output is inclusive of the line with pattern match. Which option is to be used to exclude the line containing the pattern? sed -n '/Conn.*User/,$p' > consumers.txt (11 Replies)
Discussion started by: essem
11 Replies

2. UNIX for Dummies Questions & Answers

Extracting sub-string matching the pattern.

Hi, I have a string looks like the following: USERS 32767.9844 UNDOTBS1 32767.9844 SYSAUX 32767.9844 SYSTEM 32767.9844 EMS 8192 EMS 8192 EMS_INDEXES 4096 EMS_INDEXES 4096 8 rows selected. How do I extract a sub-string to get the expected output as following: EMS 8192 EMS_INDEXES 4096 ... (3 Replies)
Discussion started by: NetBear
3 Replies

3. Shell Programming and Scripting

Pattern Matching and extracting the required fields in Perl

Hi All, I am writing the following Perl Scrip and need your help in Pattern matching : I have the following Shell Script that would read line by line from the file (file_svn) and would inturn calls the Perl Script: #!/bin/bash perl_path="/home/dev/filter"... (2 Replies)
Discussion started by: filter
2 Replies

4. Shell Programming and Scripting

Korn Shell for pattern matching and extracting

Guys, i'm new to shell scripting. Here's what i need. I need a shell script which would read a file containing only 1 line which never changes. File containts - SQL_Mgd_Svc_ELONMCL54496 |EMEA\brookkev, EMEA\fieldgra, EMEA\tidmamar, EMEA\attfiste, EMEA\baldogar, EMEA\clarkia2, EMEA\conwasha,... (9 Replies)
Discussion started by: butterfly20
9 Replies

5. Shell Programming and Scripting

Extracting a string matching a pattern from a line

Hi All, I am pretty new to pattern matching and extraction using shell scripting. Could anyone please help me in extracting the word matching a pattern from a line in bash. Input Sample (can vary between any of the 3 samples below): 1) Adaptec SCSI RAID 5445 2) Adaptec SCSI 5445S RAID 3)... (8 Replies)
Discussion started by: jharish
8 Replies

6. Shell Programming and Scripting

Extracting the strings matching a pattern from a word

Hi All , I need to extract the strings that are matching with the pattern : CUST.<AnyStringOfAnyLength>.<AnyStringOfAnyLength> from a file and then write all these string into another file. e.g. If a file SOURCE contains following lines : IF(CUST.ABCD.EFGH==1) THEN CUST.ABCD.EFGH =... (7 Replies)
Discussion started by: swapnil.nawale
7 Replies

7. Shell Programming and Scripting

Extracting N lines match number X of a pattern

Hi All, as the title says I need to extract N lines after match number X of a pattern. e.g. 111 xxx xxx 111 yyy yyy 111 www www 111 zzz zzz I would like to extract the two lines after the second 111 occurrence. I tried with grep but I didn't find any options to do that. Any... (11 Replies)
Discussion started by: f_o_555
11 Replies

8. Shell Programming and Scripting

Problem extracting just a part of a matching pattern

Hello everyone, this is my first post so please give me a hand. I apologize for my English, I'll try to be clear with my request. I need to write a script (Bash) which finds all the variables defined in the file .h of the folder and then writes the name of the files .c where these variables are... (1 Reply)
Discussion started by: paxilpaz
1 Replies

9. Shell Programming and Scripting

Pattern matching extracting urls from rss, shell scripts

Hi all, how could i do ? I have a Rss file, i want to extract only the Urls (many) matching http://www.xxx.com/trailers/ from that file and copy into another file. like " <pubDate>Wed, 29 Apr 2009 00:00:00 PST</pubDate> <content:encoded><!Apple - Movie Trailers - The Hangover"><img... (3 Replies)
Discussion started by: BremboloIV
3 Replies

10. Shell Programming and Scripting

counting the lines matching a pattern, in between two pattern, and generate a tab

Hi all, I'm looking for some help. I have a file (very long) that is organized like below: >Cluster 0 0 283nt, >01_FRYJ6ZM12HMXZS... at +/99% 1 279nt, >01_FRYJ6ZM12HN12A... at +/99% 2 281nt, >01_FRYJ6ZM12HM4TS... at +/99% 3 283nt, >01_FRYJ6ZM12HM946... at +/99% 4 279nt,... (4 Replies)
Discussion started by: d.chauliac
4 Replies

Featured Tech Videos