Print 4th line back from regexp


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Print 4th line back from regexp
# 1  
Old 11-15-2013
Print 4th line back from regexp

I'm looking for a way to print the 4th line back from a regular expression. Kind of like the below but it has to be the 4th line before the regexp.
  • Print the line immediately before regexp, but not the line containing the regexp.
Code:
sed -n '/regexp/{g;1!p;};h'

here is an example of logs(i chopped the logs bc each line is too long)
Code:
01:59:09,260 DEBUG SOAP REQUEST: <SOAP-ENV:..<ns1:mdn>NPANXX<
/ns1:mdn>
01:59:09,260 INFO  [com
01:59:09,273 INFO  [org.apache
01:59:09,283 INFO  [stdout]
01:59:29,780 WARNING SendProv has thrown exception

I'm looking for "SendProv has thrown exception" and want to parse the MDN where it threw the exception.

Any ideas?

Last edited by Scott; 11-15-2013 at 06:52 PM.. Reason: Code tags for data too
# 2  
Old 11-15-2013
Try:
Code:
awk '{a[NR]=$0;a[NR-5]=""}/SendProv has thrown exception/{print a[NR-4]}' file

# 3  
Old 11-15-2013
Code:
sed -n -e '/SendProv has thrown exception/{p;g;p;}' -e 's/.*\(mdn>[^>]*<\).*/\1/;ta' -e 'b' -e ':a' -e 'h'

---------- Post updated at 08:46 PM ---------- Previous update was at 08:35 PM ----------

Only save and print the mdn line is quite easy
Code:
sed -n -e '/SendProv has thrown exception/{g;p;}' -e '/mdn>/h'

# 4  
Old 11-20-2013
here are the commands i used to accomplish this. not sure if i could have done it with one

Extract the 4th line above SendProv has thrown exception
Code:
awk '{lines[NR] = $0} /SendProv has thrown exception/ {print lines [NR-4]} {delete lines[NR-4]}' server.log>>myfile

extract only the section of MDN
Code:
awk -F'mdn' '{for(i = 2; i < NF; i += 2) print $i}' myfile>>myfile1

results:
Code:
>NPANXX8854</ns1:

extract just NPANXX1234(this is the actual MDN)
Code:
cut -c2-11 myfile1>>myfile2

results:
Code:
NPANXX8854

remove duplicates
Code:
awk '!x[$0]++' myfile2>>myfile3

# 5  
Old 11-20-2013
Try this:
Code:
awk '{TMP[NR%5]=$0} /SendProv/ {FS="[<>]"; $0=TMP[(NR+1)%5]; print $4}' file
NPANXX8845

You may have to add the duplicate removal code...
# 6  
Old 11-22-2013
I'm sure this has been solved already given the tag but is you are looking to resolve the line
1:59:09,260 DEBUG SOAP REQUEST: <SOAP-ENV:..<ns1:mdn>NPANXX<

Simply use the command: grep -B5 "SendProv" testing.txt | head -1
# 7  
Old 11-22-2013
Non-linux users are unlikely to have -B.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

awk or sed to print the character from the previous line after the regexp match

Hi All, I need to print the characters in the previous line just before the regular expression match Please have a look at the input file as attached I need to match the regular expression ^ with the character of the previous like and also the pin numbers and the output file should be like... (6 Replies)
Discussion started by: kshitij
6 Replies

2. Shell Programming and Scripting

awk to print the string between 3rd and 4th backslashs to end of line

im trying to get awk to print the string between 3rd and 4th backslashs to end of line test could be any word this http://example.com/test/ >to this http://example.com/test/ > testalso the other way round insert string at end of line... (13 Replies)
Discussion started by: bob123
13 Replies

3. Shell Programming and Scripting

awk regexp to print repetitive pattern

How to use regexp to print out repetitive pattern in awk? $ awk '{print $0, "-\t-\t-\t-\t-\t-\t-\t-\t-\t-\t-\t-"}' output: - - - - - - - - - - - -I tried following which does not give what I want, of course. awk '{print $0, "-\t{11}-"}' output: - ... (10 Replies)
Discussion started by: yifangt
10 Replies

4. Shell Programming and Scripting

sed print first line before regexp and all lines after

Hi All I'm trying to extract the line just above a regexp and all lines after this. I'm currently doing this in two steps sed -n -e "/^+---/{g;p;}" -e h oldfile.txt > modified.txt sed -e "1,/^+---/d" -e "/^$/d" oldfile.txt >>modified.txt Sample sometext will be here sometext will be... (3 Replies)
Discussion started by: Celvin VK
3 Replies

5. Shell Programming and Scripting

awk, sed or perl regexp to print values from file

Hello all According to the following file (orignal one contains 200x times the same structure...) I was wondering if someone could help me to print <byte>??</byte> values example, running this script/command like ./script.sh xxapp I would expect as output: 102 116 112 ./script.sh xxapp2... (2 Replies)
Discussion started by: cabrao
2 Replies

6. Shell Programming and Scripting

Print lines between a regExp & a blank line

Hi, I have a file, say files_list, as below (o/p of ls -R cmd) $ cat files_list /remote/dir/path/to/file: sub-dir1 sub-dir2 sub-dir3 ... /remote/dir/path/to/file/sub-dir1: remote_file1.csv.tgz <blank line 1> /remote/dir/path/to/file/sub-dir2: remote_file2.csv.tgz <blank... (3 Replies)
Discussion started by: dips_ag
3 Replies

7. Shell Programming and Scripting

print lines AFTER lines cointaining a regexp (or print every first and fourth line)

Hi all, This should be very easy but I can't figure it out... I have a file that looks like this: @SRR057408.1 FW8Y5CK02R652T length=34 AGCAGTGGTATCAACGCAGAGTAAGCAGTGGTAT +SRR057408.1 FW8Y5CK02R652T length=34 FIIHFF6666?=:88@@@BBD:::?@ABBAAA>8 @SRR057408.2 FW8Y5CK02TBMHV length=52... (1 Reply)
Discussion started by: kmkocot
1 Replies

8. Shell Programming and Scripting

print 2 lines above regexp

I am on a Solaris 10 x86 system sample code before3 before2 before1 group after1 after2 after3 I want to grab the second line above my regexp regexp=group I want to grab ONLY the before2 line I have numerous sed and awk ways of grabbing X line below the regexp, but no luck... (1 Reply)
Discussion started by: snoman1
1 Replies

9. UNIX for Dummies Questions & Answers

print the line immediately after a regexp; but regexp is a sentence

Good Day, Im new to scripting especially awk and sed. I just would like to ask help from you guys about a sed command that prints the line immediately after a regexp, but not the line containing the regexp. sed -n '/regexp/{n;p;}' filename What if my regexp is 3 word or a sentence. Im... (3 Replies)
Discussion started by: ownins
3 Replies

10. Shell Programming and Scripting

regexp to print after a field seperator

Hi, How do i Print anything after a ':' Ex : file1: 1235131(rs32553) I want to print out "1235131(rs32553)" how do i do it. I know we can do this using awk but looking for the right syntax. Any help appreciated. Thanks, Ram (7 Replies)
Discussion started by: ramky79
7 Replies
Login or Register to Ask a Question