How to use sed to search a particular pattern in a file backward after a pattern is matched.?


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
# 1  
How to use sed to search a particular pattern in a file backward after a pattern is matched.?

Hi,
I have two files file1.txt and file2.txt. Please see the attachments.

In file2.txt (which actually is a diff output between two versions of file1.txt.), I extract the pattern corresponding to 1172c1172. Now ,In file1.txt I have to search for this pattern 1172c1172 and if found, I have to search backward for the path and print the corresponding path (/home/saurabh/file1.txt). Please note that there may be many entries between the path(/home/saurabh/file1.txt) and the line containing the pattern 1172c1172.

file1.txt:
Code:
/home/saurabh/file7.txt
117c117
<          
---
>          

/home/saurabh/file1.txt
76c76
---
79c79
---
1172c1172
<          apple, banana, orange
---
>          apple, banana, mango

/home/saurabh/file7.txt
117c117
<   	silent, helpful       
---
>  	silent

file2.txt:
Code:
2388,2391d2387
< 1172c1172
< <          apple, banana, orange
< ---
< >          apple, banana, mango

Any suggestions will be highly appreciated.

Thanks,
Saurabh

Last edited by Scott; 07-17-2013 at 03:58 PM.. Reason: Removed attachments. It's really not necessary to attach such small files
# 2  
May not be the best way, but it can do the job for you..

Code:
var=$(grep "< [^- ><]" file2.txt | sed -e 's/< //g')
awk -v pat=$var '/^\/.+/{a=$0;} $0 ~ pat{print a;exit}' file1.txt

This User Gave Thanks to rajamadhavan For This Post:
# 3  
Try
Code:
awk 'NR==2 {SRC=$2; next} $1==SRC {print PATH} $1~/^\// {PATH=$1}' file2 file1
/home/saurabh/file1.txt

This User Gave Thanks to RudiC For This Post:
# 4  
Thank you raja and RudiC.

These solutions seems to work for most of the test-cases. Haven't had much experience with awk. Please let me know ,if I understand correctly these solutions

Raja,
In the first line you extracted the pattern from file2 and stored them in a variable var. Then in the second line for any line starting with / the whole line($0) is stored in a and then you perform a match with pat($0~pat) and print a .Can you please explain how does matching $0 with pat works because $0 will contain the path and pat will contain the pattern(1172c1172).

RudyC,
Can you please explain your solution .Will this solution work if file2 has more than one entry
Code:
2388,2391d2387 < 1172c1172 < <          apple, banana, orange < --- < >          apple, banana, mango
1277,1280d1276 < 117c117 < <   	silent, helpful < --- < >  	silent

# 5  
That solution keeps the second field in the second line of the second file as the search pattern. Then it reads file1 line by line; if it finds a PATH, it keeps it; if it finds the search pattern, it prints PATH, which is the last one found.

Neither of the solutions will handle two or more search patterns. You didn't specify that. How can search patterns be identified in file2? Is it always < ....c....? Or what patterns do you have in mind now?

Last edited by RudiC; 07-18-2013 at 04:03 PM.. Reason: correction of typo in script
# 6  
Thanks RudyC for the explanation. The pattern will be
Code:
[digit]{1,}[acd][digit]{1,}

i.e atleast one digit followed by any one of the characters a,c,d and followed by one or more digits.

Thanks
# 7  
$0 ~ pat will be true only when awk approaches the line containing 1172c1172. Thats when the script prints the previously saved path string (variable 'a') and exit. I hope you can get this.
Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #8
Difficulty: Easy
macOS is based on the Unix operating system.
True or False?

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Search a string inside a pattern matched block of a file

How to grep for searching a string within a begin and end pattern of a file. Sent from my Redmi 3S using Tapatalk (8 Replies)
Discussion started by: Baishali
8 Replies

2. Shell Programming and Scripting

Search for Pattern as output between the matched String

Hello, I have a file which has the below contents : VG_name LV_name LV_size in MB LV_option LV_mountpoint owner group y testdg rahul2lv 10 "-A y -L" /home/abc2 ... (6 Replies)
Discussion started by: rahul2662
6 Replies

3. Shell Programming and Scripting

Insert certain field of matched pattern line above pattern

Hello every, I am stuck in a problem. I have file like this. I want to add the fifth field of the match pattern line above the lines starting with "# @D". The delimiter is "|" eg > # @D0.00016870300|0.05501020000|12876|12934|3||Qp||Pleistocene||"3 Qp Pleistocene"|Q # @P... (5 Replies)
Discussion started by: jyu3
5 Replies

4. Shell Programming and Scripting

Search for a pattern in a String file and count the occurance of each pattern

I am trying to search a file for a patterns ERR- in a file and return a count for each of the error reported Input file is a free flowing file without any format example of output ERR-00001=5 .... ERR-01010=10 ..... ERR-99999=10 (4 Replies)
Discussion started by: swayam123
4 Replies

5. Shell Programming and Scripting

Search pattern within file using sed..

Hi, Could someone help me in figuring out a way using which i can search for a specific pattern. Eg. JUSTDOIT..I have to print just the word "DO" from "JUSTDOIT" If the same word JUSTDOIT is print n number of times (6 Replies)
Discussion started by: sankasu
6 Replies

6. Shell Programming and Scripting

extracting matched pattern from a line using sed

I am trying to pull certain pieces of data out of a line of a file that matches a certain pattern: The three pieces that I want to pull out of this line are the only occurrences of that pattern within the line, but the rest of the line is not consistent in each file. Basically the line is... (3 Replies)
Discussion started by: ellhef
3 Replies

7. Shell Programming and Scripting

search for the matched pattern by tracing back from the line

Hi, I want to grep the line which has 'data11'.then from that line, i need to trace back and find out the immediate line which has the same timestamp of that grepped line. for eg: log file: ----------- Process - data Process - datavalue - 2345 Process - data Process - data Process... (9 Replies)
Discussion started by: Sharmila_P
9 Replies

8. Shell Programming and Scripting

SED: delete and print the only exact matched pattern

I am really need help with the regular expression in SED. From input file, I need to extract lines that have the port number (sport or dport) as defined. The input file is something like this time=1209515280-1209515340 dst=192.168.133.202 src=208.70.8.23 bytes=2472 proto=6 sport=80 dport=1447... (6 Replies)
Discussion started by: new_buddy
6 Replies

9. Shell Programming and Scripting

SED Search Pattern and Replace with the Pattern

Hello All, I have a string "CP_STATUS OSSRC_R6_0_Shipment_R1H_CU AOM_901046 R1H_LLSV1_2008031", and I just want to extract LLSV1, but I dont get the expected result when using the sed command below. # echo "CP_STATUS OSSRC_R6_0_Shipment_R1H_CU AOM_901046 R1H_LLSV1_2008031" | awk '{print... (4 Replies)
Discussion started by: racbern
4 Replies

10. Shell Programming and Scripting

appending with sed based on matched pattern

Hi, I want to know if you can input with sed but instead of specifing a line number like below I wan't to be able to insert based on a specific word or patttern. 10i\ Insert me after line 10 is this possible with sed or should I use AWK? Thanks Jack (2 Replies)
Discussion started by: jack1981
2 Replies

Featured Tech Videos