finding the nth match


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers finding the nth match
# 1  
Old 06-15-2011
finding the nth match

I have a file that has information for a person....each person gets 3 or more lines to describe them.

I was hoping to match person 1, then person 2.....BUT I do not know how to tell grep I only want the first (2nd, 3rd or nth) match.

The alternative is doing line by line logic, which is fine with me as long as I know that is what I am supposed to be doing.

OS: Solaris 10

help?

thanks,

cs

Last edited by countryStyle; 06-15-2011 at 12:59 PM.. Reason: forgot to include unix type
# 2  
Old 06-15-2011
If you post your input file and sample expected output that would be more helpful.
# 3  
Old 06-15-2011
Quote:
Originally Posted by getmmg
If you post your input file and sample expected output that would be more helpful.
not really...but here it goes.
Make up any scenario you want....how about where each line starts with a single digit.

1
5
9
7
5

I want grep to get the the nth match of a digit matched via regex
using solaris
# 4  
Old 06-15-2011
Quote:
Originally Posted by countryStyle
not really...but here it goes.
Make up any scenario you want....how about where each line starts with a single digit.
Make up the scenario? Is this an actual problem or are you just quizzing us?

We often get questions about getting grep to cross multiple lines, but grep doesn't. But a 1-liner in awk might be able to do it.

We can't help you until we know how your data's organized because the logic depends on that. It's not psychic and neither are we.
This User Gave Thanks to Corona688 For This Post:
# 5  
Old 06-15-2011
Quote:
Originally Posted by Corona688
Make up the scenario? Is this an actual problem or are you just quizzing us?

We often get questions about getting grep to cross multiple lines, but grep doesn't. But a 1-liner in awk might be able to do it.

We can't help you until we know how your data's organized because the logic depends on that. It's not psychic and neither are we.
Yeah....I am a wanna be teacher and fulfill my fantasies by quizzing people on the internet. Go get a life....you are being difficult.

Maybe you answered my question....but you sound generally uninformed because you are being difficult: grep will not provide the nth match only.

can anyone else confirm?
# 6  
Old 06-15-2011
Quote:
Originally Posted by countryStyle
Yeah....I am a wanna be teacher and fulfill my fantasies by quizzing people on the internet. Go get a life....you are being difficult.
If you'd posted your data you could have had an answer an hour ago...
Quote:
Maybe you answered my question....but you sound generally uninformed
I'll ignore the personal slur and explain a little more.

grep considers no logic but patterns when matching lines. It doesn't remember anything about previous lines and has no expression to carry information from previous lines across to next ones. The awk language is much better suited, since it deals with lines/patterns and has variables plus logical expressions. (I think sed does too in a fashion, but its expression syntax is rather convoluted. awk gives you straightforward variables with names, and straightforward expressions with if/else.)
Quote:
because you are being difficult:
I'm only asking you for your data. I'm not even the first one.

If you really want I'll give you a ridiculous solution like grep pattern file | tail -n +5 | head -n 1 to get match 4 which is of course a very silly solution and might not work in Solaris. A less silly solution would be nawk '/pattern/ {} NR==2' but you asked for grep, this may not suit your needs, and there may be even more efficient ways to deal with the data depending on what it actually is and what you're trying to do.

Last edited by Corona688; 06-15-2011 at 01:57 PM..
# 7  
Old 06-15-2011
Quote:
Originally Posted by Corona688
If you'd posted your data you could have had an answer an hour ago... I'll ignore the personal slur and explain a little more.

grep considers no logic but patterns when matching lines. It doesn't remember anything about previous lines and has no expression to carry information from previous lines across to next ones. The awk language is much better suited, since it deals with lines/patterns and has variables plus logical expressions. (I think sed does too in a fashion, but its expression syntax is rather convoluted. awk gives you straightforward variables with names, and straightforward expressions with if/else.) I'm only asking you for your data. I'm not even the first one.

If you really want I'll give you a ridiculous solution like grep pattern file | tail -n +5 | head -n 1 to get match 4 which is of course a very silly solution and might not work in Solaris. A less silly solution would be nawk '/pattern/ {} NR=2' but you asked for grep, this may not suit your needs, and there may be even more efficient ways to deal with the data depending on what it actually is and what you're trying to do.
You slur...I slur back....that is how that first part went......anyways...

See....you did not need data to answer and there was no problem adding on the excellent commentary/lead about awk. I know a lot of people often ask for the answer to their specific issue and want YOU the other poster to do all the work for them (sometimes very practical). I am still at the general question looking to get more of a clue phase but if you want to do all my work for me let me know...I am certain you can do it fast.

I have something to work with and can make some progress (fingers crossed).

Thank you so much: )

---------- Post updated at 12:09 PM ---------- Previous update was at 12:03 PM ----------

had to change the line for Solaris:

grep pattern file | tail +5 | head -1

I am not working with large files here and performance is not an issue......

The line is easy to use and works in the Bash shell so....why is this a silly solution, performance, crossplatform issues?

thanks again.
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. AIX

Print nth previous line after match

Please help me print nth line after match awk or sed one line command. (3 Replies)
Discussion started by: sushma123
3 Replies

2. Shell Programming and Scripting

sed : replace Nth match in a file

I have a situation where a file "config.txt" looks like this Servername: OS: Serername: OS: Servername: OS: .... .... ... Servername: OS: looking for the sed syntax to replace the "Nth" occurrence of Servername (i would apply the same logic to OS as well), want to replace the Nth... (4 Replies)
Discussion started by: alldbest
4 Replies

3. Shell Programming and Scripting

How to display when nth line match a pattern?

Hi All, I have sample of listing as following Database 2 entry: Database alias = PXRES Database name = PXRES Local database directory = /db2/data1/db2phnx Database release level = d.00 Comment ... (3 Replies)
Discussion started by: ckwan
3 Replies

4. Shell Programming and Scripting

Problem getting Nth match in sed

Hi all, I'm trying to create a sed command to get the Nth instance of an XML tag in a string, but thus far I can only ever seem to get the last one. Given an XML string: <Wrap><GrayLevel>a</GrayLevel><GrayLevel>b</GrayLevel></Wrap> I tried to do this on the command line to get each... (7 Replies)
Discussion started by: Zel2008
7 Replies

5. Answers to Frequently Asked Questions

Finding the nth Particular Week in a Month – shell script

I see lot of request posted in internet to find out the day of nth week in a Month. example: what is the date of 3rd Sunday in October What is the date of 2nd Friday in June 2012 what is the date of 4th Saturday in January 2011..etc.. The below shell script is used to find out the... (1 Reply)
Discussion started by: itkamaraj
1 Replies

6. UNIX for Dummies Questions & Answers

Printing nth and n+1th line after a pattern match

Hi , I want to print the nth and n+1 lines from a file once it gets a pattern match. For eg: aaa bbb ccc ddd gh jjjj If I find a match for bbb then I need to print bbb as well as 3rd and 4th line from the match.. Please help..Is it possible to get a command using sed :) (6 Replies)
Discussion started by: saj
6 Replies

7. Shell Programming and Scripting

Finding Nth Column

Please help me how can I display every nth field present in a "|" delimited file. Ex: If a have a file with data as a|b|c|d|e|f|g|h|k|l|m|n I want to display every 3rd feild which means the output should be c f k n Please help me. (1 Reply)
Discussion started by: ngkumar
1 Replies

8. UNIX for Dummies Questions & Answers

Finding nth line across multiple files

I have several files (around 50) that have the similar format. I need to extract the 5th line from every file and output that into a text file. So far, I have been able to figure out how to do it for a single file: $ awk 'NR==5' text1.txt > results.txt OR $ sed -n '5p' text1.txt > results.txt... (6 Replies)
Discussion started by: oriqin
6 Replies

9. Shell Programming and Scripting

Getting filename for Nth line pattern match

Hi, I have many scripts in particular directory. And few of the scripts have exit 0 in second line. Now i wanted to list out the scripts name which has the exit 0 in its second line I tried many options , but i can not get the filename along with the nth line pattern match :mad:. Can anyone... (14 Replies)
Discussion started by: puni
14 Replies

10. UNIX for Dummies Questions & Answers

Finding nth occurrence in line and replacing it

Hi, I have several files with data that have to be imported to a database. These files contain records with separator characters. Some records are corrupt (2 separators are missing) and I need to correct them prior to importing them into the db. Example: ... (5 Replies)
Discussion started by: stresing
5 Replies
Login or Register to Ask a Question