Visit Our UNIX and Linux User Community


Multiple Line awk search and replace


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Multiple Line awk search and replace
# 1  
Old 09-04-2013
Multiple Line awk search and replace

I have a log file that contains many lines but contains the following line three times:

Code:
related_pin : "t_bypass";




Here are the 3 occurrences and the two lines after from my file.txt:


Code:
related_pin : "t_bypass";
        sdf_cond : "rstq_b";
        timing_sense : negative_unate;

        related_pin : "t_bypass";
        sdf_cond : "rstq_b";
        timing_sense : positive_unate;

        related_pin : "t_bypass";
        timing_type : recovery_rising;
        rise_constraint (constraint_template_7x7)



This is an output log and the first two occurrences can occur in either order. The difference being in the second line. I would like to replace the middle line in the first two occurrences as such, notice that one has the ! and the other does not:

Code:
related_pin : "t_bypass";
        sdf_cond : "t_bypass && rstq_b";
        timing_sense : negative_unate;

        related_pin : "t_bypass";
        sdf_cond : "!t_bypass && rstq_b";
        timing_sense : positive_unate;

        related_pin : "t_bypass";
        timing_type : recovery_rising;
        rise_constraint (constraint_template_7x7)



I simplly want to change the sdf_cond line without losing anything. So its almost like I want to do the search for the first line and do a conditional on two lines after and then replace the middle line if the condition is met. I can use sed if that is easier, my problem has been the new line separators.


Moderator's Comments:
Mod Comment Use code tags!


Last edited by radoulov; 09-04-2013 at 11:54 AM..
# 2  
Old 09-04-2013
What exactly do you mean by search for the first line and do a conditional on two lines after and then replace the middle line if the condition is met as your post is confusing so state your problem clearly if you want someone to help you out because we cant read your mind...
# 3  
Old 09-05-2013
Hey Shamrock, I was trying to describe what I tried. If you look at the first two occurrences, the difference is in the third line, either positive or negative. If the word positive shows up in the third line then I want the middle line to change to !t_bypass && rstq_b, and if negative shows up, then I want to change it to t_bypass && rstq_b. If neither show up, as in the third occurrence, then I want to do nothing.

What I want to do is get from the start point that I posted to the end point, keeping in mind that I do know the which of these two sections will come first in the log that I am reading:
Code:
        related_pin : "t_bypass";
        sdf_cond : "rstq_b";
        timing_sense : positive_unate;
 
        related_pin : "t_bypass";
        sdf_cond : "rstq_b";
        timing_sense : negative_unate;

---------- Post updated 09-05-13 at 08:35 AM ---------- Previous update was 09-04-13 at 12:36 PM ----------

Anybody have any ideas? I have tried using sed and awk but no luck.

Last edited by Franklin52; 09-05-2013 at 03:38 AM.. Reason: Please use code tags
# 4  
Old 09-05-2013
Is this what you're trying to achieve?
Code:
awk '/related_pin : "t_bypass";/{print;getline;s=$0;getline;if(/positive/){sub(/rstq_b/,"t_bypass && rstq_b",s)}else if(/negative/){sub(/rstq_b/,"!t_bypass && rstq_b",s)};print s;print;next}1' file

# 5  
Old 09-05-2013
That is almost it!!! The result though does not put in the ampersands. Instead it puts rstq_b in its place. I tried doing \&\& to escape and got the same result. I am researching how to print a & in the sub command but if you know feel free to post.

Thanks again for the help!!
# 6  
Old 09-05-2013
Ah right, replace & with \\&
# 7  
Old 09-05-2013
I figured out the last piece, i needed to use \\\&\\\&. Everything is working now!!!


THANKS A BUNCH FOR THE HELP!!! My awk statement was missing the s=$0 and I was trying to use sed instead of sub.

Previous Thread | Next Thread
Test Your Knowledge in Computers #346
Difficulty: Easy
AWK was created at Bell Labs in the 1960s,
True or False?

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Using awk to multiple and replace in a specific line

Hi Folks, I have the file in which I need to multiply the content of a line and replace the initial content of that line with the obtained answer. For example if this is my input file file1.txt 2.259314750 xxxxxx 1.962774350 xxxxxx 2.916817290 xxxxxx 1.355026900 ... (4 Replies)
Discussion started by: Madiouma Ndiaye
4 Replies

2. Shell Programming and Scripting

Multiple line search, replace second line, using awk or sed

All, I appreciate any help you can offer here as this is well beyond my grasp of awk/sed... I have an input file similar to: &LOG &LOG Part: "@DB/TC10000021855/--F" &LOG &LOG &LOG Part: "@DB/TC10000021852/--F" &LOG Cloning_Action: RETAIN &LOG Part: "@DB/TCCP000010713/--A" &LOG &LOG... (5 Replies)
Discussion started by: KarmaPoliceT2
5 Replies

3. Shell Programming and Scripting

awk to search for specific line and replace nth column

I need to be able to search for a string in the first column and if that string exists than replace the nth column with "-9.99". AW12000012012 2.38 1.51 3.01 1.66 0.90 0.91 1.22 0.82 0.57 1.67 2.31 3.63 0.00 AW12000012013 1.52 0.90 1.20 1.34 1.21 0.67 ... (14 Replies)
Discussion started by: ncwxpanther
14 Replies

4. Shell Programming and Scripting

Search & Replace: Multiple Strings / Multiple Files

I have a list of files all over a file system e.g. /home/1/foo/bar.x /www/sites/moose/foo.txtI'm looking for strings in these files and want to replace each occurrence with a replacement string, e.g. if I find: '#@!^\&@ in any of the files I want to replace it with: 655#@11, etc. There... (2 Replies)
Discussion started by: spacegoose
2 Replies

5. Shell Programming and Scripting

awk delete/remove rest of line on multiple search pattern

Need to remove rest of line after the equals sign on search pattern from the searchfile. Can anybody help. Couldn't find any similar example in the forum: infile: 64_1535: Delm. = 86 var, aaga 64_1535: Fran. = 57 ex. ccc 64_1639: Feb. = 26 (link). def 64_1817: mar. = 3/4. drz ... (7 Replies)
Discussion started by: sdf
7 Replies

6. Shell Programming and Scripting

awk + gsub to search multiple input values & replace with located string + extra text

Hi all. I have the following command that is successfully searching for any one of the strings on all lines of a file and replacing it with the instructed value. cat inputFile | awk '{gsub(/aaa|bbb|ccc|ddd/,"1234")}1' > outputFile This does in fact replace any occurrence of aaa, bbb,... (2 Replies)
Discussion started by: dazhoop
2 Replies

7. Shell Programming and Scripting

awk multiple-line search and replace one-liner

Hi I am trying to search and replace a multi line pattern in a php file using awk. The pattern starts with <div id="navbar"> and ends with </div> and spans over an unknown number of lines. I need the command to be a one liner. I use the "record separator" like this : awk -v... (8 Replies)
Discussion started by: louisJ
8 Replies

8. Shell Programming and Scripting

perl search and replace - search in first line and replance in 2nd line

Dear All, i want to search particular string and want to replance next line value. following is the test file. search string is tmp,??? ,10:1 "???" may contain any 3 character it should remain the same and next line replace with ,10:50 tmp,123 --- if match tmp,??? then... (3 Replies)
Discussion started by: arvindng
3 Replies

9. Shell Programming and Scripting

Does Sed Search/Replace Work For Multiple Matches On The Same Line?

Hello, I would like to delete all the footnotes in all my htm files. Hence, I have to delete the whole font tag pairs, i.e. deleting everything between the begin/end font tags. I create a testfile, of which data parts of all four lines are the same except for the number of font tag pairs,... (3 Replies)
Discussion started by: cibalo
3 Replies

10. Shell Programming and Scripting

Perl: Search for string on line then search and replace text

Hi All, I have a file that I need to be able to find a pattern match on a line, search that line for a text pattern, and replace that text. An example of 4 lines in my file is: 1. MatchText_randomNumberOfText moreData ReplaceMe moreData 2. MatchText_randomNumberOfText moreData moreData... (4 Replies)
Discussion started by: Crypto
4 Replies

Featured Tech Videos