Last occurrence of code between two tags


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Last occurrence of code between two tags
# 8  
Old 01-20-2012
Scrutinizer's solutions are elegant and correct for the input you posted.
What syntax error are you getting from the first command? Awk should tell you where the syntax error is:
Code:
$ awk '/user1/& &/response2/{p=$0}END{print p}' RS= xxx.log
awk: /user1/& &/response2/{p=$0}END{print p}
awk:         ^ syntax error

Notice the caret ('^') in the last line. It points to the position of syntax error.
Are your responses really separated by an empty line?
Can you please post a sample from your real input? (Use code tags).
# 9  
Old 01-20-2012
Hi, I am searching for a response xml. As you might know xml tags ends with </.
My user tag starts with <user> and ends with </user> but not with <user>.
I believe, We need to use escape patterns for that. Anyway I am trying with
Code:
<userId>user1

as follows which is working without syntax error but couldnt give me the
the result that I wanted.

Code:
/usr/xpg4/bin/awk '/<userId>user1/&&/<response2>/{p=$0}END{print p}' RS= infile

For security reasons, I can not paste the sample log from my actual log, but I am pasting the replica of my log with some dummy tags and values in it.

Please check and help me in getting response2 of user1.

I am using correct tags while I am running on actual log, so pls ignore if you find tag used for user is not correct in the following snippet.


Code:
    Log line response 1 user user1
    Logs of some other user ... task done by user X 
    Logs of other user tasks done by user Y
    log line user1 doing some task 
    <response1>
        <abc>
            <ddd>asdfasd</ddd>
            <ggg>4545</ggg>
        </abc>
        <abc>
            <aaaa>4545</aaaa>
            <ggg>0455</ggg>
        </abc>
        <abc>
            <ffff>455445</ffff>
            <ggg>0454545</ggg>
        </abc>
        <gggttrr>
            <aaaa>
                <rtyrry>
                    <weere>
                        <werfwe>serwe</werfwe>
                        <d>1</d>
                    </weere>
                    <sadaf>dddfdf</sadaf>
                    <user>user1</user>
                </rtyrry>
            </aaaa>
            <werwe>werwe</werwe>
            <werwew>fasdsadfa</werwew>
        </gggttrr>
        <dddd>
            <wertty>sdfadfss</wertty>
        </dddd>
        <dddd>
            <wertty>Paasdf</wertty>
        </dddd>
        <dddd>
            <wertty>asdfasd</wertty>
        </dddd>
    </response1>
    <reponse2>
        <abc>
            <ddd>asdfasd</ddd>
            <ggg>4545</ggg>
        </abc>
        <abc>
            <aaaa>4545</aaaa>
            <ggg>0455</ggg>
        </abc>
        <abc>
            <ffff>455445</ffff>
            <ggg>0454545</ggg>
        </abc>
        <gggttrr>
            <aaaa>
                <rtyrry>
                    <weere>
                        <werfwe>serwe</werfwe>
                        <d>1</d>
                    </weere>
                    <sadaf>dddfdf</sadaf>
                    <user>user1</user>
                </rtyrry>
            </aaaa>
            <werwe>werwe</werwe>
            <werwew>fasdsadfa</werwew>
        </gggttrr>
        <dddd>
            <wertty>sdfadfss</wertty>
        </dddd>
        <dddd>
            <wertty>Paasdf</wertty>
        </dddd>
        <dddd>
            <wertty>asdfasd</wertty>
        </dddd>
    </reponse2>
    Log line response 1 user user2
    log line user2 doing some task 
    <response1>
        <abc>
            <ddd>asdfasd</ddd>
            <ggg>4545</ggg>
        </abc>
        <abc>
            <aaaa>4545</aaaa>
            <ggg>0455</ggg>
        </abc>
        <abc>
            <ffff>455445</ffff>
            <ggg>0454545</ggg>
        </abc>
        <gggttrr>
            <aaaa>
                <rtyrry>
                    <weere>
                        <werfwe>serwe</werfwe>
                        <d>1</d>
                    </weere>
                    <sadaf>dddfdf</sadaf>
                    <user>user2</user>
                </rtyrry>
            </aaaa>
            <werwe>werwe</werwe>
            <werwew>fasdsadfa</werwew>
        </gggttrr>
        <dddd>
            <wertty>sdfadfss</wertty>
        </dddd>
        <dddd>
            <wertty>Paasdf</wertty>
        </dddd>
        <dddd>
            <wertty>asdfasd</wertty>
        </dddd>
    </response1>
    Log line response3 user user2
    log line user1 doing some task 
    <reponse3>
        <abc>
            <ddd>asdfasd</ddd>
            <ggg>4545</ggg>
        </abc>
        <abc>
            <aaaa>4545</aaaa>
            <ggg>0455</ggg>
        </abc>
        <abc>
            <ffff>455445</ffff>
            <ggg>0454545</ggg>
        </abc>
        <gggttrr>
            <aaaa>
                <rtyrry>
                    <weere>
                        <werfwe>serwe</werfwe>
                        <d>1</d>
                    </weere>
                    <sadaf>dddfdf</sadaf>
                    <user>user1</user>
                </rtyrry>
            </aaaa>
            <werwe>werwe</werwe>
            <werwew>fasdsadfa</werwew>
        </gggttrr>
        <dddd>
            <wertty>sdfadfss</wertty>
        </dddd>
        <dddd>
            <wertty>Paasdf</wertty>
        </dddd>
        <dddd>
            <wertty>asdfasd</wertty>
        </dddd>
    </reponse3>
    
    Log line response 2 user user2
    log line user2 doing some task  
    <reponse2>
        <abc>
            <ddd>asdfasd</ddd>
            <ggg>4545</ggg>
        </abc>
        <abc>
            <aaaa>4545</aaaa>
            <ggg>0455</ggg>
        </abc>
        <abc>
            <ffff>455445</ffff>
            <ggg>0454545</ggg>
        </abc>
        <gggttrr>
            <aaaa>
                <rtyrry>
                    <weere>
                        <werfwe>serwe</werfwe>
                        <d>1</d>
                    </weere>
                    <sadaf>dddfdf</sadaf>
                    <user>user2</user>
                </rtyrry>
            </aaaa>
            <werwe>werwe</werwe>
            <werwew>fasdsadfa</werwew>
        </gggttrr>
        <dddd>
            <wertty>sdfadfss</wertty>
        </dddd>
        <dddd>
            <wertty>Paasdf</wertty>
        </dddd>
        <dddd>
            <wertty>asdfasd</wertty>
        </dddd>
    </reponse2>

Thanks for your continuous effort.

---------- Post updated at 11:05 AM ---------- Previous update was at 10:54 AM ----------

Some points to be noted

. There may be some n number of response1 responses and n number of response2 responses of each user.

So I need the last response2 of user1.

I ran the command
Code:
/usr/xpg4/bin/awk '/<user>user1/&&/response2>/{p=$0}END{print p}' RS= logForum.txt

on the code snippet (saved in logForum.txt) given in previous post.

It gives me nothing in the output.

Last edited by nariwithu; 01-20-2012 at 12:06 PM.. Reason: missing end CODE tag
# 10  
Old 01-20-2012
Quote:
I ran the command
Code:
/usr/xpg4/bin/awk '/<user>user1/&&/response2>/{p=$0}END{print p}' RS= logForum.txt on the code snippet (saved in logForum.txt) given in previous post.
It gives me nothing in the output.
That's because you didn't copy it correctly from Scrutinizer's post:
Code:
/usr/xpg4/bin/awk '/<userId>user1/&&/<response2>/{p=$0}END{print p}' RS= 

since your sample input contained <userId> tag but not <user> tag.

The reason why it's not giving you what you want on your real input is because from what i see now, the responses are not separated by empy lines, like you posted before. Try to pre-process the file by inserting an empty line before opening <response[0-9]*> tag and after closing tag:
Code:
sed -e 's/.*<response[0-9]*>.*/\n&/; s/<\/response[0-9]*>/&\n/' inputFile | 
/usr/xpg4/bin/awk '/<user>user1<\/user>/&&/response2/{p=$0}END{print p}' RS=

# 11  
Old 01-20-2012
Quote:
Originally Posted by mirni
That's because you didn't copy it correctly from Scrutinizer's post:
I have used correct tags while I ran the commands. Yes I agree, I had given one time as userId and now I am using user. I had given a note on this in my previous post.

Quote:
Code:
sed -e 's/.*<response[0-9]*>.*/\n&/; s/<\/response[0-9]*>/&\n/' inputFile |  /usr/xpg4/bin/awk '/<user>user1<\/user>/&&/response2/{p=$0}END{print p}' RS=

I tried to run with your sed command on my log, it still didnt give me any response.

My log now has <user> tag, but not <userId> tag..

Sorry for confusion.
# 12  
Old 01-20-2012
In your posted input, there is no 'response2', there is only 'reponse2'. Is this a typo, or is there really "reponse" in the input?
This User Gave Thanks to mirni For This Post:
# 13  
Old 01-20-2012
Ohh.. How did I do that ? Yes Mirni it is typo error. My sincere apologies for inconvenience.
I modified my template log file with the correct tag .. But it is not replacing the empty lines where it is just displaying n before and after response tags .. Pasted the output below.. I think we should better use escape pattern for that as well ..

Code:
 Log line response 1 user user1
    Logs of some other user ... task done by user X
    Logs of other user tasks done by user Y
    log line user1 doing some task
n    <response1>
        <abc>
            <ddd>asdfasd</ddd>
            <ggg>4545</ggg>
        </abc>
        <abc>
            <aaaa>4545</aaaa>
            <ggg>0455</ggg>
        </abc>
        <abc>
            <ffff>455445</ffff>
            <ggg>0454545</ggg>
        </abc>
        <gggttrr>
            <aaaa>
                <rtyrry>
                    <weere>
                        <werfwe>serwe</werfwe>
                        <d>1</d>
                    </weere>
                    <sadaf>dddfdf</sadaf>
                    <user>user1</user>
                </rtyrry>
            </aaaa>
            <werwe>werwe</werwe>
            <werwew>fasdsadfa</werwew>
        </gggttrr>
        <dddd>
            <wertty>sdfadfss</wertty>
        </dddd>
        <dddd>
            <wertty>Paasdf</wertty>
        </dddd>
        <dddd>
            <wertty>asdfasd</wertty>
        </dddd>
    </response1>n
n    <response2>
        <abc>
            <ddd>asdfasd</ddd>
            <ggg>4545</ggg>
        </abc>
        <abc>
            <aaaa>4545</aaaa>
            <ggg>0455</ggg>
        </abc>
        <abc>
            <ffff>455445</ffff>
            <ggg>0454545</ggg>
        </abc>
        <gggttrr>
            <aaaa>
                <rtyrry>
                    <weere>
                        <werfwe>serwe</werfwe>
                        <d>1</d>
                    </weere>
                    <sadaf>dddfdf</sadaf>
                    <user>user1</user>
                </rtyrry>
            </aaaa>
            <werwe>werwe</werwe>
            <werwew>fasdsadfa</werwew>
        </gggttrr>
        <dddd>
            <wertty>sdfadfss</wertty>
        </dddd>
        <dddd>
            <wertty>Paasdf</wertty>
        </dddd>
        <dddd>
            <wertty>asdfasd</wertty>
        </dddd>
    </response2>n
    Log line response 1 user user2
    log line user2 doing some task
n    <response1>
        <abc>
            <ddd>asdfasd</ddd>
            <ggg>4545</ggg>
        </abc>
        <abc>
            <aaaa>4545</aaaa>
            <ggg>0455</ggg>
        </abc>
        <abc>
            <ffff>455445</ffff>
            <ggg>0454545</ggg>
        </abc>
        <gggttrr>
            <aaaa>
                <rtyrry>
                    <weere>
                        <werfwe>serwe</werfwe>
                        <d>1</d>
                    </weere>
                    <sadaf>dddfdf</sadaf>
                    <user>user2</user>
                </rtyrry>
            </aaaa>
            <werwe>werwe</werwe>
            <werwew>fasdsadfa</werwew>
        </gggttrr>
        <dddd>
            <wertty>sdfadfss</wertty>
        </dddd>
        <dddd>
            <wertty>Paasdf</wertty>
        </dddd>
        <dddd>
            <wertty>asdfasd</wertty>
        </dddd>
    </response1>n
    Log line response3 user user2
    log line user1 doing some task
n    <response3>
        <abc>
            <ddd>asdfasd</ddd>
            <ggg>4545</ggg>
        </abc>
        <abc>
            <aaaa>4545</aaaa>
            <ggg>0455</ggg>
        </abc>
        <abc>
            <ffff>455445</ffff>
            <ggg>0454545</ggg>
        </abc>
        <gggttrr>
            <aaaa>
                <rtyrry>
                    <weere>
                        <werfwe>serwe</werfwe>
                        <d>1</d>
                    </weere>
                    <sadaf>dddfdf</sadaf>
                    <user>user1</user>
                </rtyrry>
            </aaaa>
            <werwe>werwe</werwe>
            <werwew>fasdsadfa</werwew>
        </gggttrr>
        <dddd>
            <wertty>sdfadfss</wertty>
        </dddd>
        <dddd>
            <wertty>Paasdf</wertty>
        </dddd>
        <dddd>
            <wertty>asdfasd</wertty>
        </dddd>
    </response3>n
   
    Log line response 2 user user2
    log line user2 doing some task 
n    <response2>
        <abc>
            <ddd>asdfasd</ddd>
            <ggg>4545</ggg>
        </abc>
        <abc>
            <aaaa>4545</aaaa>
            <ggg>0455</ggg>
        </abc>
        <abc>
            <ffff>455445</ffff>
            <ggg>0454545</ggg>
        </abc>
        <gggttrr>
            <aaaa>
                <rtyrry>
                    <weere>
                        <werfwe>serwe</werfwe>
                        <d>1</d>
                    </weere>
                    <sadaf>dddfdf</sadaf>
                    <user>user2</user>
                </rtyrry>
            </aaaa>
            <werwe>werwe</werwe>
            <werwew>fasdsadfa</werwew>
        </gggttrr>
        <dddd>
            <wertty>sdfadfss</wertty>
        </dddd>
        <dddd>
            <wertty>Paasdf</wertty>
        </dddd>
        <dddd>
            <wertty>asdfasd</wertty>
        </dddd>
    </response2>n

Here is the modified log file

Code:
    Log line response 1 user user1
    Logs of some other user ... task done by user X
    Logs of other user tasks done by user Y
    log line user1 doing some task
    <response1>
        <abc>
            <ddd>asdfasd</ddd>
            <ggg>4545</ggg>
        </abc>
        <abc>
            <aaaa>4545</aaaa>
            <ggg>0455</ggg>
        </abc>
        <abc>
            <ffff>455445</ffff>
            <ggg>0454545</ggg>
        </abc>
        <gggttrr>
            <aaaa>
                <rtyrry>
                    <weere>
                        <werfwe>serwe</werfwe>
                        <d>1</d>
                    </weere>
                    <sadaf>dddfdf</sadaf>
                    <user>user1</user>
                </rtyrry>
            </aaaa>
            <werwe>werwe</werwe>
            <werwew>fasdsadfa</werwew>
        </gggttrr>
        <dddd>
            <wertty>sdfadfss</wertty>
        </dddd>
        <dddd>
            <wertty>Paasdf</wertty>
        </dddd>
        <dddd>
            <wertty>asdfasd</wertty>
        </dddd>
    </response1>
    <response2>
        <abc>
            <ddd>asdfasd</ddd>
            <ggg>4545</ggg>
        </abc>
        <abc>
            <aaaa>4545</aaaa>
            <ggg>0455</ggg>
        </abc>
        <abc>
            <ffff>455445</ffff>
            <ggg>0454545</ggg>
        </abc>
        <gggttrr>
            <aaaa>
                <rtyrry>
                    <weere>
                        <werfwe>serwe</werfwe>
                        <d>1</d>
                    </weere>
                    <sadaf>dddfdf</sadaf>
                    <user>user1</user>
                </rtyrry>
            </aaaa>
            <werwe>werwe</werwe>
            <werwew>fasdsadfa</werwew>
        </gggttrr>
        <dddd>
            <wertty>sdfadfss</wertty>
        </dddd>
        <dddd>
            <wertty>Paasdf</wertty>
        </dddd>
        <dddd>
            <wertty>asdfasd</wertty>
        </dddd>
    </response2>
    Log line response 1 user user2
    log line user2 doing some task
    <response1>
        <abc>
            <ddd>asdfasd</ddd>
            <ggg>4545</ggg>
        </abc>
        <abc>
            <aaaa>4545</aaaa>
            <ggg>0455</ggg>
        </abc>
        <abc>
            <ffff>455445</ffff>
            <ggg>0454545</ggg>
        </abc>
        <gggttrr>
            <aaaa>
                <rtyrry>
                    <weere>
                        <werfwe>serwe</werfwe>
                        <d>1</d>
                    </weere>
                    <sadaf>dddfdf</sadaf>
                    <user>user2</user>
                </rtyrry>
            </aaaa>
            <werwe>werwe</werwe>
            <werwew>fasdsadfa</werwew>
        </gggttrr>
        <dddd>
            <wertty>sdfadfss</wertty>
        </dddd>
        <dddd>
            <wertty>Paasdf</wertty>
        </dddd>
        <dddd>
            <wertty>asdfasd</wertty>
        </dddd>
    </response1>
    Log line response3 user user2
    log line user1 doing some task
    <response3>
        <abc>
            <ddd>asdfasd</ddd>
            <ggg>4545</ggg>
        </abc>
        <abc>
            <aaaa>4545</aaaa>
            <ggg>0455</ggg>
        </abc>
        <abc>
            <ffff>455445</ffff>
            <ggg>0454545</ggg>
        </abc>
        <gggttrr>
            <aaaa>
                <rtyrry>
                    <weere>
                        <werfwe>serwe</werfwe>
                        <d>1</d>
                    </weere>
                    <sadaf>dddfdf</sadaf>
                    <user>user1</user>
                </rtyrry>
            </aaaa>
            <werwe>werwe</werwe>
            <werwew>fasdsadfa</werwew>
        </gggttrr>
        <dddd>
            <wertty>sdfadfss</wertty>
        </dddd>
        <dddd>
            <wertty>Paasdf</wertty>
        </dddd>
        <dddd>
            <wertty>asdfasd</wertty>
        </dddd>
    </response3>
   
    Log line response 2 user user2
    log line user2 doing some task 
    <response2>
        <abc>
            <ddd>asdfasd</ddd>
            <ggg>4545</ggg>
        </abc>
        <abc>
            <aaaa>4545</aaaa>
            <ggg>0455</ggg>
        </abc>
        <abc>
            <ffff>455445</ffff>
            <ggg>0454545</ggg>
        </abc>
        <gggttrr>
            <aaaa>
                <rtyrry>
                    <weere>
                        <werfwe>serwe</werfwe>
                        <d>1</d>
                    </weere>
                    <sadaf>dddfdf</sadaf>
                    <user>user2</user>
                </rtyrry>
            </aaaa>
            <werwe>werwe</werwe>
            <werwew>fasdsadfa</werwew>
        </gggttrr>
        <dddd>
            <wertty>sdfadfss</wertty>
        </dddd>
        <dddd>
            <wertty>Paasdf</wertty>
        </dddd>
        <dddd>
            <wertty>asdfasd</wertty>
        </dddd>
    </response2>


Last edited by nariwithu; 01-20-2012 at 03:08 PM..
# 14  
Old 01-20-2012
If there are no empty lines, you need something more complicated like this, or you can preprocess first like mirni suggested...
Code:
/usr/xpg4/bin/awk '$0~"<"resp{sect=1} 
     sect{p=p (p?RS:x) $0} 
     $0~"<user>"user && sect{found=1} 
     $0~"</"resp{if(found)n=p;found=0;p=x;sect=0}
     END{print n}' resp=response2 user=user1 infile

-or-
Code:
/usr/xpg4/bin/sed '/<\/response/G' infile | 
/usr/xpg4/bin/awk '/<user>user1/&&/response2>/{p=$0}END{print p}' RS=

This User Gave Thanks to Scrutinizer For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

5 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

sed print from last occurrence match until the end of last occurrence match

Hi, i have file file.txt with data like: START 03:11:30 a 03:11:40 b END START 03:13:30 eee 03:13:35 fff END jjjjjjjjjjjjjjjjjjjjj START 03:14:30 eee 03:15:30 fff END ggggggggggg iiiiiiiiiiiiiiiiiiiiiiiii I want the below output START (13 Replies)
Discussion started by: Jyotshna
13 Replies

2. UNIX for Dummies Questions & Answers

Code for exact match to count occurrence

Hi all, I have an input file as below. I would like to count the occurrence of pattern matching 8th field for each line. Input: field_01 field_02 field_03 field_04 field_05 field_06 field_07 field_08 TA T TA T TA TA TA... (3 Replies)
Discussion started by: huiyee1
3 Replies

3. Shell Programming and Scripting

Substitute first occurrence of keyword if occurrence between two other keywords

Assume a string that contains one or multiple occurrences of three different keywords (abbreviated as "kw"). I would like to replace kw2 with some other string, say "qux". Specifically, I would like to replace that occurrence of kw2 that is the first one that is preceded by kw1 somewhere in the... (4 Replies)
Discussion started by: M Gruenstaeudl
4 Replies

4. Shell Programming and Scripting

number of occurrence

: i need a bash script to convert the displayed output 12 14 15 12 15 13 to 12 * 2 ,13 * 1,14*1,15*1 Thanks, nevil (2 Replies)
Discussion started by: nevil
2 Replies

5. Shell Programming and Scripting

Replace second occurrence only

HPUX /bin/sh (posix) I have a file as such cat dog mouse deer elk rabbit mouse rat pig I would like to replace the second occurrence of mouse in this file with mouse2. The rest of the file has to stay exactly as is. I'm not sure exactly where mouse might be (could be first,second,third... (5 Replies)
Discussion started by: lyoncc
5 Replies
Login or Register to Ask a Question