Sponsored Content
Top Forums Shell Programming and Scripting inserting and replacing lines with awk Post 302529922 by tempestas on Saturday 11th of June 2011 09:45:44 AM
Old 06-11-2011
inserting and replacing lines with awk

Hello,

I need to insert varying lines (i.e. these lines are an output of another script) between lines starting with certain fields.
An example to make it more clear.

This is the file where I wanna insert lines:
(save it as "input.txt")
Code:
ContrInMi_c_mir 	 2 	 10066	181014 	 200750
ContrMidl_y_cut 	 2 	 12345	201085 	 220988
ContrMiRi_c_mir 	 2 	 13206	221155 	 240891
ContrIdex_p_mir 	 1 	 765	241225 	 260962
ContrMidl_b_cut 	 1 	 2686	261296 	 281032

This is the file ("insert.txt") containing the lines that should be inserted:
Code:
texta: ContrInMi_c_mir
textb: ContrMidl_y_cut
textins: sec_buttonpress 	 3 	 15147
texta: ContrIdex_p_mir
textb: ContrMidl_b_cut
textins: sec_buttonpress 	 2 	 14605

And this is the script which calls at the end the .awk file "dothis.awk"
Code:
#!/bin/bash
declare -a Arraytexta
declare -a Arraytextb
declare -a Arraytextins
nrLines=`awk 'END {print NR}' insert.txt`
nrLines=`expr ${nrLines} - 2`

for ((i=1; i<=$nrLines; i++)); 
do 
countb=`expr ${i} + 1`
countins=`expr ${i} + 2`
Arraytexta[i]=`sed -n "${i} p" insert.txt | awk 'BEGIN{FS=":"}{print $2}'`
Arraytextb[i]=`sed -n "${countb} p" insert.txt | awk 'BEGIN{FS=":"}{print $2}'`
Arraytextins[i]=`sed -n "${countins} p" insert.txt | awk 'BEGIN{FS=":"}{print $2}'`
gawk -v textins="${Arraytextins[i]}" -v texta="${Arraytexta[i]}" -v textb="${Arraytextb[i]}" -f dothis.awk input.txt" > output.txt
done

Here is dothis.awk
Code:
BEGIN{
	flg=0
}
{
	if (flg==1 && $1==textb || $1=="sec_buttonpress"){
		if($1==textb  || $1=="sec_buttonpress"){
			print textins
		}
	}
	if ($1==texta){
		flg=1
	}
	print $0
}
END{
	
}

So, basically what I try to do is: I search for the lines starting with "texta" and check if the following line starts either with "textb" or - if there has been a line previously inserted (which can happen) - if this starts with "sec_buttonpress". If I found these lines then the "textins" should inserted.
Actually, an extension to cover all needs would be to check also if the second field in the file "input.txt" contains "1". If so then the line (only fields 2 and 3) to be inserted after should actually replace the fields 2 and 3 of this line.

For some reason, "dothis.awk" is not working: it inserts at the end of teh "input.txt" file always the same 2 fields: containing a 6digit number and a "0".

What am I doing wrong?

Thanks a lot in advance for help and advices!!!


tempestas

Last edited by tempestas; 06-12-2011 at 08:17 AM.. Reason: correcting a file name in the example code
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Inserting specific lines in vi

How can I insert, say lines 500 - 700 from another file into the current file on the current line (cursor) that I am editing while in vi (AIX). I know how to insert the entire file but how do you do it when you only need certain lines from a huge file? I've referenced my Unix Unleash book but... (2 Replies)
Discussion started by: giannicello
2 Replies

2. Shell Programming and Scripting

inserting a lines in a file

Hi folks, i need to insert the same set of lines between each line input lines 111111 aaaaaa 333333 output should be 111111 1 2 3 aaaaaa 1 2 3 333333 1 (2 Replies)
Discussion started by: Balaji Sukumara
2 Replies

3. Shell Programming and Scripting

inserting lines

Hi I would like to add lines to a file at specific locations. eg: If I have a file containing data... ABC DEF GHIJKLKMNOP RSTUVWXYZ and I have a requirement to insert a lines a) "LINE_FIRST" before first line in the file b) "LINE_X" before third line in the file c) "LINE_LAST"... (2 Replies)
Discussion started by: tostay2003
2 Replies

4. Shell Programming and Scripting

Replacing lines between two files with awk

Hello Masters, I have two subtitles file with different language like below First file : 1 00:00:41,136 --> 00:00:43,900 2 00:00:55,383 --> 00:00:58,477 <i> Ladies and gentlemen,</i> <i>this is Simon Barsinister,</i> 3 00:00:58,553 --> 00:01:00,521 <i>the wickedest man in the... (8 Replies)
Discussion started by: rk4k
8 Replies

5. Shell Programming and Scripting

inserting multiple lines with awk

awk '/<login-module code="com.nlayers.seneca.security.LdapLogin" flag="sufficient">/{p++} /<login-module code="com.nlayers.seneca.security.LdapLogin" flag="sufficient">/ && p==1 {$0="Mulitple lines here\n"$0}1' login-config.xml In the above awk code inside shell script, i am having problems when... (1 Reply)
Discussion started by: sunrexstar
1 Replies

6. Shell Programming and Scripting

Help in replacing two blank lines with two lines of diff data

Hi.. I'm facing a trouble in replacing two blank lines in a file using shell script... I used sed to search a line and insert two blank lines after the searchd line using the following sed command. sed "/data/{G;G;}/" filename . In the file, after data tag, two lines got inserted blank lines..... (4 Replies)
Discussion started by: arjun_arippa
4 Replies

7. UNIX for Dummies Questions & Answers

Finding lines with a regular expression, replacing them with blank lines

So the tag for this forum says all newbies welcome... All I want to do is go through my file and find lines which contain a given string of characters then replace these with a blank line. I really tried to find a simple command to do this but failed. Here's what I did come up with though: ... (2 Replies)
Discussion started by: Golpette
2 Replies

8. Shell Programming and Scripting

Summing over specific lines and replacing the lines with the sum using sed, awk

Hi friends, This is sed & awk type question. I have a text file which has numbers spread all over the file. I want to sum the series of numbers whenever i find it and produce an output file with the sum. For example ###start of input text file #### abc def ghi 1 2 3 4 kjld random... (3 Replies)
Discussion started by: kaaliakahn
3 Replies

9. Shell Programming and Scripting

Replacing lines matching a multi-line pattern (sed/perl/awk)

Dear Unix Forums, I am hoping you can help me with a pattern matching problem. What am I trying to do? I want to replace multiple lines of a text file (that match a multi-line pattern) with a single line of text. These patterns can span several lines and do not always have the same number of... (10 Replies)
Discussion started by: thefang
10 Replies

10. Shell Programming and Scripting

Merging multiple lines to columns with awk, while inserting commas for missing lines

Hello all, I have a large csv file where there are four types of rows I need to merge into one row per person, where there is a column for each possible code / type of row, even if that code/row isn't there for that person. In the csv, a person may be listed from one to four times... (9 Replies)
Discussion started by: RalphNY
9 Replies
All times are GMT -4. The time now is 05:50 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy