Select everything between first and last occurrence of same pattern


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Select everything between first and last occurrence of same pattern
# 1  
Old 06-21-2011
Select everything between first and last occurrence of same pattern

Greetings,

I am writing a script which requires as a part, selecting all the lines between the first and last occurrence of a pattern.

I have an nawk alternative that is working. But thre should be a generic script that should run on all os viz, linux, sun , aix.

The awk script that i am using is given below.

Quote:
Pattern to search = xyz
Awk script

Code:
 
nawk 'NR==FNR{if(/xyz/){last=NR;if(!first)first=NR};next} FNR>=first && FNR<=last' test.txt test.txt


HTML Code:
Here nawk is doing two iteration:
the first to discover where the first and last occurrence are, the second to actually print the lines in between.

Can anyone help me with the sed substitute for selecting everything between the first and last occurrence of a pattern in just one iteration.

Thanks in advance.
Usha
# 2  
Old 06-21-2011
Code:
 
Is this what you are looking for 
Input:
this is test
one
two
three
four
two
one
end of file

"one" is the search string here.

Code:
Code:
perl -0ne 'print $1 if /one(.*)one/sg' test

Output:
Code:
 
two
three
four
two

This User Gave Thanks to getmmg For This Post:
# 3  
Old 06-21-2011
Thanks for the reply getmmg.

But I need the lines containg the pattern also to be printed.

sample output from your example:

Code:
 
one
two
three
four
two
one

Also, i do not have perl in my system, Can you suggest some sed code?

Thanks,
Usha Rao
# 4  
Old 06-21-2011
Hello Usha,

How about this?

Code:
awk -v c=0 '/xyz/&&c++<1 {a=$0;next} /xyz/&&c>0 { a=a"\n"$0;f=a;next} c>0 {a=a"\n"$0;next} END { print f}' input_file


Last edited by panyam; 06-21-2011 at 10:10 AM.. Reason: removed few redundant variables
This User Gave Thanks to panyam For This Post:
# 5  
Old 06-21-2011
Code:
sed -n '/one/,/one/p'

# 6  
Old 06-21-2011
Hi Panyam,

Thanks for the reply.
The given awk solution perfectly works when i am using nawk in my solaris system.

But i am writing a generic script that should be common for all solaris , linux and aix system.

Is there any SED substitute.


Thanks,
Usha Rao
# 7  
Old 06-21-2011
Quote:
Originally Posted by usha rao
Hi Panyam,

Thanks for the reply.
The given awk solution perfectly works when i am using nawk in my solaris system.

But i am writing a generic script that should be common for all solaris , linux and aix system.

Is there any SED substitute.


Thanks,
Usha Rao
I believe "awk" is every where!!!! In AIX, LINUX and UNIX too!!!..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk to extract and print first occurrence of pattern in each line

I am trying to use awk to extract and print the first ocurrence of NM_ and NP_ with a : before in each line. The input file is tab-delimeted, but the output does not need to be. The below does execute but prints all the lines in the file not just the patterns. Thank you :). file tab-delimeted ... (2 Replies)
Discussion started by: cmccabe
2 Replies

2. Shell Programming and Scripting

awk command to get file content until 2 occurrence of pattern match

AWK command to get file content until 3 occurrence of pattern match, INPUT FILE: JMS_BODY_FIELD:JMSText = <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <custOptIn xmlns="http://com/walm/ta/cu/ccs/xml2"> <person>Romi</person> <appName>SAP</appName> </custOptIn> ... (4 Replies)
Discussion started by: prince1987
4 Replies

3. Shell Programming and Scripting

UNIX help to print 50 lines after every 3rd occurrence pattern till end of file

I need help with extract/print lines till stop pattern. This needs to happen after every 3rd occurrence of start pattern and continue till end of file. Consider below is an example of the log file. my start pattern will be every 3rd occurrence of ERROR_FILE_NOT_FOUND and stop pattern will be... (5 Replies)
Discussion started by: NSS
5 Replies

4. Shell Programming and Scripting

Match from one pattern to second occurrence of second pattern

Given an XML file that contains (NOT "consists of"): </dict> <key>system.</key> <dict> <key>rule</key> <string>default</string> </dict> <key>system.burn</key> ... (9 Replies)
Discussion started by: jnojr
9 Replies

5. Shell Programming and Scripting

Changing the first occurrence after matching a pattern

Hi, I got a file which looks like this: Value A Status: - Other: - Value B Status: - Other: - Value C Status: - Other: - I would like to change only the first line which includes the "Status:" string after matching the line containing "Value B", so the output file should look... (5 Replies)
Discussion started by: wenclu
5 Replies

6. Shell Programming and Scripting

Insert new pattern in newline after the nth occurrence of a line pattern - Bash in Ubuntu 12.04

Hi, I am getting crazy after days on looking at it: Bash in Ubuntu 12.04.1 I want to do this: pattern="system /path1/file1 file1" new_pattern=" data /path2/file2 file2" file to edit: data.db - I need to search in the file data.db for the nth occurrence of pattern - pattern must... (14 Replies)
Discussion started by: Phil3759
14 Replies

7. Shell Programming and Scripting

print only the first occurrence of a pattern

Hi, I have a file as below select or create proc /*comments*/ /*comments*/ /*comments*/ /*comments*/ ( variables4 datatypes1, variables1 datatypes2, variables2 datatypes3, variables3 datatypes2 ) some text some text ( sometext some text ) some text some text (3 Replies)
Discussion started by: manasa_vs
3 Replies

8. UNIX for Advanced & Expert Users

Unix: list out Pattern occurrence (count)

Need to search a pattern occurrence (count) in a specified file. Below is the details $ cat fruits apple apple ball ball apple ball ball ball apple apple apple cat cat cat cat cat apple apple Note: If I'll use the grep command with -c option then it'll count the 1st occurrence in... (6 Replies)
Discussion started by: tp2115
6 Replies

9. UNIX for Dummies Questions & Answers

line number of the i-th occurrence of a pattern

Hi all, is there a simple way to obtain the line number of the i-th occurrence of a pattern? I have OCCURRENCE=`grep -io "${STRING_NAME}" ${1}-${8}${EXT}.out_bis| wc -l` which tells me how many occurency I have. I would like to go through them and determine the line number and assign... (6 Replies)
Discussion started by: f_o_555
6 Replies

10. Shell Programming and Scripting

Count the number of occurrences of a pattern between each occurrence of a different pattern

I need to count the number of occurrences of a pattern, say 'key', between each occurrence of a different pattern, say 'lu'. Here's a portion of the text I'm trying to parse: lu S1234L_149_m1_vg.6, part-att 1, vdp-att 1 p-reserver IID 0xdb registrations: key 4156 4353 0000 0000 ... (3 Replies)
Discussion started by: slipstream
3 Replies
Login or Register to Ask a Question