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
# 22  
Old 06-22-2011
Quote:
Originally Posted by alister
Looks like it's not looping properly. Try the following:
Code:
sed -n '/xyz/!d; :top
H; /xyz/ {s/.*//; x; s/\n//; p;}; n;
b top
' rem

If that doesn't work, I'd be curious to know if the script file version works (using the code that begins with #n in a file and executing it with sed's -f option).

Regards,
Alister
Hello Alister,
Neither of the "sed's" working. The above one is giving "infinite number of xyz's in output" and I have to close the terminal to come out.

The sed with -f option has thrown the below error:

Code:
/home/ravi>sed -f sed_one rem
sed: /xyz/! d is not a recognized function.

Here , sed_one does have below code:
Code:
 
/home/ravi/>cat sed_one
#n
/xyz/! d
:top
H
/xyz/ {
    s/.*//
    x
    s/\n//
    p
}
n
b top

Regards
Ravi
# 23  
Old 06-22-2011
Removed : the code was containing an error of logic...

That one should be better :

Code:
awk '{A[NR]=$0}/one/{m=x?m:NR;x=NR}END{while(m<=x)print A[m++]}' input


Last edited by ctsgnb; 06-22-2011 at 09:04 AM..
# 24  
Old 06-22-2011
Strange, this:
Code:
awk '/one/{f=1;x=NR}f{A[++c]=$0}END{while(++d<x)print A[d]}' input

works fine on a HP-UX machine but not on my Debian box with gawk Smilie
# 25  
Old 06-22-2011
@Franklin

Ah ... forget my code ... there is an error of logic in it (confusing "line number of 'one' pattern" and "total number of line that match the requirement"
(i have just removed that erroneous code from my previous post)

In fact it is because the first occurrence of "one" in my tst file was appearing at the second line so the dift with final NR of the "one" occurrence was -1 ...
NR or NR-1 (x or x-1) doesn't necessary match the number of wanted lines !!!

That code should be fine :
Code:
awk '{A[NR]=$0}/one/{m=x?m:NR;x=NR}END{while(m<=x)print A[m++]}' input


Last edited by ctsgnb; 06-22-2011 at 09:22 AM..
# 26  
Old 06-22-2011
Quote:
Originally Posted by panyam
Hello Alister,
Neither of the "sed's" working.
Hmmm. I know it sounds like the easy way out, but I suspect that your system's sed is broken (at least with respect to POSIX). This is not a complicated sed script, it uses standard syntax, and it works fine on the three different implementations that I tested. I don't have access to a HP-UX system, so I cannot take a deeper look.

Regards,
Alister

Last edited by alister; 06-22-2011 at 09:45 AM..
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