Get nth occurence of string from a file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Get nth occurence of string from a file
# 1  
Old 04-09-2015
Get nth occurence of string from a file

I have file in which the data looks like this,

Code:
01,0000000,xxxxxxx/                        
02,xxxxxxxx,yyyyyy/                                    
03,test1,41203016,,/      
01,0000000,xxxxxxx/                        
02,xxxxxxxx,yyyyyy/                                    
03,test2,41203017,,/     
01,0000000,xxxxxxx/                        
02,xxxxxxxx,yyyyyy/                                    
03,test3,41203018,,/

I would not know what values will be there in place of test1, test2 and test3 in my file.

I wrote a command to get these values from the file,
Code:
grep "^03,.*,.*$" file.dat | cut -d"," -f2

this returns,
Code:
test1
test2
test3

Is there a way I can get a specific occurence (ex: 5th or 9th) of this string. let say in this case, can I get only test2?

Appreciate your help.
# 2  
Old 04-09-2015
Assuming your code works correctly for your data:

Code:
recnum=4
grep "^03,.*,.*$" file.dat | cut -d"," -f2 |  awk -v r_num=$recnum 'NR==r_num'

The reason for my caveat is your regex - looks unusual, but could be just right for your dataset.
This User Gave Thanks to jim mcnamara For This Post:
# 3  
Old 04-09-2015
Please use code tags for all code, data, and output.

awk is a powerful language for this sort of thing, you can match strings like grep, but you can also count the number of lines and columns, tell it how columns are separated, count things and use variables. You'll find it on any UNIX or UNIX-like system.

Code:
$ awk -F"," -v X="03" -v N=2 '($1 == X) && ((++L)>=(N+0)) { print $2 ; exit }' inputfile

test2

$

-F"," tells it to consider , as column splitters.

-v X="03" and -v N=2 preset the X and N variables inside awk. awk has its own variables independent of the shell's.

($1 == X) && ((++L) ==(N+0)) { ... } means "run the following code when the first column equals the variable X, and L is equal to N". $ means column in awk, not variable. $1 would be 01, $2 would be 0000000, etc. "++L" adds one to L every time ($1 == X) is true.

I did (N+0) to make sure awk used N as a number, not a string.

{ print $2 ; exit } means "print the second column, then stop reading this file".

So, a combined grep, wc, and cut.
This User Gave Thanks to Corona688 For This Post:
# 4  
Old 04-10-2015
Thanks a lot for the command and a beautiful explanation.

---------- Post updated 04-10-15 at 02:34 PM ---------- Previous update was 04-09-15 at 02:53 PM ----------

I have an additional requirement for this,

I need to replace this value with some other value.
Is there a way I can do this by using a command in conjunction with this awk command.

Code:
$ awk -F"," -v X="03" -v N=2 '($1 == X) && ((++L)>=(N+0)) { print $2 ; exit }' inputfile

In this test2 should be replaced with replace2.

Please help.
# 5  
Old 04-10-2015
how about this?

Code:
{ $2="replace2"; print $2 ; exit }'

# 6  
Old 04-10-2015
Thanks for your reply.

I tried this..
Code:
awk -F"," -v X="03" -v N=6 '($1 == X) && ((++L)>=(N+0)) { $2="replace2"; print $2 ; exit }' myfile.txt > temp.txt

but this is replacing whole content of my file with replace2.
# 7  
Old 04-10-2015
Quote:
Originally Posted by r@v!7*7@
Thanks for your reply.

I tried this..
Code:
awk -F"," -v X="03" -v N=6 '($1 == X) && ((++L)>=(N+0)) { $2="replace2"; print $2 ; exit }' myfile.txt > temp.txt

but this is replacing whole content of my file with replace2.

care to give an example of what you are looking for? exact input and exact output samples would help.
This User Gave Thanks to senhia83 For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Delete after nth occurence of string in each line

Hello, Environment: I am under Ubuntu 18.04 bionic. I have an sql file consisting of 10K lines. Objective: What I am trying to attain is to remove everything coming after 2nd tab in each line. While searching for the answer, I found two answers and both gave expected result just for the first... (2 Replies)
Discussion started by: baris35
2 Replies

2. UNIX for Dummies Questions & Answers

Extract until nth occurence

Hi, I couldn't figure how to extract until last occurence of a character. I have the string ./dir1/file1/abc.sh The output should be /dir1/file1 So, the command should display the path until last occurence of "/". Thanks. (3 Replies)
Discussion started by: rajivn786
3 Replies

3. Shell Programming and Scripting

Grab nth occurence in between two patterns using awk or sed

Hi , I have an issue where I want to parse through the output from a file and I want to grab the nth occurrence of text in between two patterns preferably using awk or sed ! TICKET NBR : 1 !GSI : 102 ! 3100.2.112.1 11/06/2013 15:56:29 ! 3100.2.22.3 98 ! 3100.2.134.2... (8 Replies)
Discussion started by: OTNA
8 Replies

4. Shell Programming and Scripting

[Solved] Find and replace till nth occurence of a special character

Hi, I have a requirement to search for a pattern in each line in a file and remove the in between words till the 3rd occurrence of double quote ("). Ex: CREATE TABLE "SCHEMANAME"."AMS_LTV_STATUS" (Note: "SCHEMANAME" may changes for different schemas. Its not a fixed value) I need to... (2 Replies)
Discussion started by: satyaatcgi
2 Replies

5. Shell Programming and Scripting

Delete until Nth occurence (sed, awk)

Hello people, Once more I need your help with SED/AWK I need to delete up to the Nth occurence of a char (from the beggining) and until the Mth occurence of a char (from the end) Example: Input: a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z Output: i,j Must delete up to the... (2 Replies)
Discussion started by: drbiloukos
2 Replies

6. Shell Programming and Scripting

Find the occurence of particular string in log file

I have a log file which looks like this: <845185415165:STATUS:5/0:0:0:0:0|ghy59DI5zasldf87asdfamas8df9asd903tGUVSQx4GJVSQ==> I have to extract DATE and number of times the keyword STATUS is shown on each date. Input is : <1354625655744:STATUS:5/0:0:0:0:0|ghy59DI5ztGUVSQx4GJVSQ==>... (8 Replies)
Discussion started by: maddyrox
8 Replies

7. UNIX for Dummies Questions & Answers

To find the Nth Occurence of Search String

Hi guys, I like to find the Line number of Nth Occurence of a Search string in a file. If possible, if it will land the cursor to that particualar line will be great. Cheers!! (3 Replies)
Discussion started by: mac4rfree
3 Replies

8. Shell Programming and Scripting

Replacing nth occurence

Hi My input file is like this for eg: abc abc abc abc abc abc i would like to replace "abc" with "cba" where the occurrence is divisible by 2 of eg here 2nd, 4th and 6th occurence shud be replace can anyone suggest in awk or sed (11 Replies)
Discussion started by: raghav288
11 Replies

9. Shell Programming and Scripting

Replace matching nth occurence

Hi for eg my file has: val1 | val2 | val1 | val2 | val1 | val2 | val1 | val2 | here i need to replace '|' with '|\n' where the occurence of '|' is divisble by 2 so that the output comes like this val1 | val2 | val1 | val2 | val1 | val2 | val1 | val2 | Requesting suggestions in... (1 Reply)
Discussion started by: raghav288
1 Replies

10. Shell Programming and Scripting

delete line upto the nth occurence of a particular charachter.

hi all i want to delete a line upto a particular character. here is example. cp cms/images/wifi-zone.png i want to delete the line till . (cp cms/images/wifi-zone.) so the output wud be "png" only how can i do it? also please note down that dot (.) can also occur multiple... (12 Replies)
Discussion started by: kashifv
12 Replies
Login or Register to Ask a Question