Grep word after last occurance of string and display next few lines


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Grep word after last occurance of string and display next few lines
# 15  
Old 12-12-2013
Quote:
Originally Posted by nes
Hi,

I wanted to grep string "ERROR" and "WORNING" after last occurrence of String "Starting" only and wanted to display two lines after searched ERROR and WORNING string and one line before. I have following cronjob log file "errorlog" file and I have written the code for same in Unix as below and working fine but not able to implement it in SunSolari.

Please find errorlog file as below :

Code:
it is Starting 
line1
line2
ERROR
line3
line4

it is Starting
line5
ERROR
line6
line7

it is Starting
line8
WARNING
line8.8
line8.9
line9
ERROR
line10
line11

Expected output something like as follow :

Code:
line8
WARNING
line8.8

line9
ERROR
line10

Following code is working in UNIX/LINUX but not working in SunSolari

Code:
ERROR="ERROR:"
WARNING="WARNING" 
 ERR=$ERROR"\|"$WARNING

awk  '/Starting/{if(b) exit; else b=1}1' $filename | grep -A3 -in "$ERR"

Please advise Smilie
Code:
in solaris grep -A switch does not work try using this grep instead

/usr/sfw/bin/ggrep -A3

# 16  
Old 12-12-2013
In your first post you wanted a "before" line (that my awk script stored in the b variable) and 2 "after" lines.
Without "before" line and 3 "after" lines:
Code:
awk 'cnt&&cnt-- {s=s RS $0} /ERROR|WARNING/ {if (cnt==0) s=s (s?RS:s) $0; cnt=3} /Starting/ {s=""; cnt=0} END {print s}' errorlog

# 17  
Old 12-12-2013
Quote:
Originally Posted by MadeInGermany
In your first post you wanted a "before" line (that my awk script stored in the b variable) and 2 "after" lines.
Without "before" line and 3 "after" lines:
Code:
awk 'cnt&&cnt-- {s=s RS $0} /ERROR|WARNING/ {if (cnt==0) s=s (s?RS:s) $0; cnt=3} /Starting/ {s=""; cnt=0} END {print s}' errorlog

Actually, after throwing away everything in the sample input before the last line containing "Starting", the command:
Code:
grep -E -A3 -in 'WARNING|ERROR'

(the original command line nes provided [except it was missing the -E]) on the remaining text would produce:
Code:
3:WARNING
4-line8.8
5-line8.9
6-line9
7:ERROR
8-line10
9-line11

and accept ERROR and WARNING in mixed case (not just in all caps). You and I could duplicate this in awk, but it is complex enough that I didn't want to take the time to reinvent what grep already does so well. I thought we just needed to extract the final lines from errlog and feed them into the grep command nes had already supplied.
# 18  
Old 12-23-2013
When I tried the following code in SUNOS systeam for small file it is working fine, but if I am using same commnad for 1000 to 10000 lines of file. following code is not working in Sunos systeam.

Code:
ERRFILE="outputfile"
 
nl $file | tac | awk '{T[NR%3]=$0} /ERROR|WARNING/ {L=NR+1; print T[(NR+1)%3];print T[(NR+2)%3]; print; next} NR<=L; /Starting/ {exit}'  |tac >> $ERRFILE

---------- Post updated at 10:22 AM ---------- Previous update was at 10:15 AM ----------

Following small file :

Code:
it is Starting line1line2ERRORline3line4it is Startingline5ERRORline6line7it is Startingline8WARNINGline8.8line8.9line9ERRORline10line11

And getting with line number but not counting blank line for small file as below :

Code:
    13  line8
    14  WARNING
    15  line8.8
    16  line8.9
    17  line9
    18  ERROR
    19  line10
    20  line11

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to grep for a word and display last transection?

Hi, When we "grep" for a word in a file, it returns the last lines containing the word that we searched for. Is there a way to display last line to grep. Thanks Ex log. Ex. logname.log 2015-07-29 06:43:07.023|BETA |2015-07-29... (5 Replies)
Discussion started by: ooilinlove
5 Replies

2. Shell Programming and Scripting

Multi line document to single lines based on occurance of string

Hi Guys, I am new to awk and sed, i am working multiline document, i want to make make that document into SINGLE lines based on occurace of string "dwh". here's the sample of my problem.. dwh123 2563 4562 4236 1236 78956 12394 4552 dwh192 2656 46536 231326 65652 6565 23262 16625623... (5 Replies)
Discussion started by: victor369
5 Replies

3. Shell Programming and Scripting

Search a String and display only word.

Hello Gurus, Apologies if this Q has been repeated but i was not able to find it :( I have an input file: ------------------------------- Replace DB.Employee as select column1 column2 from DB_T.Emp and DB.Test and DB.Dept and DB_T.Ter; ------------------------ (4 Replies)
Discussion started by: indrajit_u
4 Replies

4. Shell Programming and Scripting

Parse a file to display lines containing a word

Hi! I'm trying to create a shell script to parse a file which might have multiple lines matching a pattern (i.e. containing some word). I need to return all lines matching the pattern, but stripping the contents of that line until the pattern is matched For example, if my input file was ... (4 Replies)
Discussion started by: orno
4 Replies

5. UNIX for Dummies Questions & Answers

how to grep the word and display only the second word from it

hi, consider the below line in a text file, 'Y',getdate(),'N','V',NULL ..... 'N',getdate(),'Y','D',NULL ..... 'Y','N','Y',getdate(),'Y','D',NULL .... as u see above, i want only the second word after the getdate() word... getdate() will not come 2nd word alwys it may be any position but i... (11 Replies)
Discussion started by: prsam
11 Replies

6. Shell Programming and Scripting

grep display word only

Folks, is it possible to display only words with grep (or any built-in ultility)? I have more than 1 pattern to search, say apple & orange The text goes like this: So I need to display all the words starting with apple or orange The output should be: Any idea? (7 Replies)
Discussion started by: bsddaemon
7 Replies

7. Shell Programming and Scripting

How can I match lines with just one occurance of a string in awk?

Hi, I'm trying to match records using awk which contain only one occurance of my string, I know how to match one or more (+) but matching only one is eluding me without developing some convoluted bit of code. I was hoping there would be some simple pattern matching thing similar to '+' but... (9 Replies)
Discussion started by: jonathanm
9 Replies

8. Shell Programming and Scripting

How to Grep for particular word and display..

Hi Guru's.... I've one log file in all my systems which writes the backup information.. I'have written a command like this: ssh -l ora${sid} ${primaryhost} "tail -50 /oracle/$ORACLE_SID/newbackup/END_BACKUP.log" |grep 'insert' |tail -1| awk '{print $7}' We have nearly 50 systems in our... (2 Replies)
Discussion started by: suri.tyson
2 Replies

9. UNIX for Dummies Questions & Answers

how to grep for a word and display only the word

Hi, When we "grep" for a word in a file, it returns the lines containing the word that we searched for. Is there a way to display only the words and not the entire line containing them. Thanks Ananth (6 Replies)
Discussion started by: ananthmm
6 Replies

10. UNIX for Dummies Questions & Answers

grep a word and display its column

Hi, I need idea about this, say I have this line: 05 21 * * 0,6 /user/clean.desktop.sh > /tmp/desktop_rpt 2>&1 I would need to grep the word desktop and display the /user/clean.desktop.sh and not the whole line. And if I have some more lines say, 05 21 * * 0,6 /user/clean.desktop.sh >... (1 Reply)
Discussion started by: Orbix
1 Replies
Login or Register to Ask a Question