Sponsored Content
Top Forums Shell Programming and Scripting inserting and replacing lines with awk Post 302529975 by tempestas on Saturday 11th of June 2011 08:13:57 PM
Old 06-11-2011
Hi birei,

thanks a lot for your comments! Sorry, if it's not really clear what I meant. I'll try to improve that:

Quote:
Originally Posted by birei
1.- Which file is untitled3.txt?
Sorry, my mistake: it should be called "insert.txt". I changed that in my first post.
Quote:
Originally Posted by birei
2.- Try comment a little bit your code to know what you want to do.
Here the code commented:
Code:
#!/bin/bash
### ok, this is only for creating the example files and try to make it look like the original. 
### My original code is much longer since I process also some other parts of the original input.
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`
### Following, I create the arrays that contain the informations that are needed for the "gawk" command:
### First, the pattern from the first line of the match.
Arraytexta[i]=`sed -n "${i} p" insert.txt | awk 'BEGIN{FS=":"}{print $2}'`
### Second, the pattern with which the following line should start.
Arraytextb[i]=`sed -n "${countb} p" insert.txt | awk 'BEGIN{FS=":"}{print $2}'`
### Third, the text that should be inserted.
Arraytextins[i]=`sed -n "${countins} p" insert.txt | awk 'BEGIN{FS=":"}{print $2}'`
### Here, I'll try to pass on the informations from the arrays above into the "dothis.awk" file.
gawk -v textins="${Arraytextins[i]}" -v texta="${Arraytexta[i]}" -v textb="${Arraytextb[i]}" -f dothis.awk input.txt > output.txt
done

Quote:
Originally Posted by birei
3.- Try one awk program instead using several 'sed' & 'awk' commands.
Sorry, but I am a beginner with awk. So some things seem for me at this point easier or more familiar with sed. Smilie
Quote:
Originally Posted by birei
4.- Input file of 'dothis.awk' is 'input.txt' while in the 'awk' program you
search 'texta' and 'textb' fields which are from 'insert.txt' file. Is this
correct?
Yes, that's correct.
Quote:
Originally Posted by birei
5.- Paste the output.txt you are looking for.
Here is an example for the "output.txt" file.
Code:
ContrInMi_c_mir 	 2 	 10066	181014 	 200750
sec_buttonpress 	 3 	 15147
ContrMidl_y_cut 	 2 	 12345	201085 	 220988
ContrMiRi_c_mir 	 2 	 13206	221155 	 240891
ContrIdex_p_mir 	 1 	 765	241225 	 260962
sec_buttonpress 	 2 	 14605
ContrMidl_b_cut 	 1 	 2686	261296 	 281032

It would be even better if lines that contain in $2 the number "1", can be replaced, i.e. only $2 and $3 should be replaced. Like in this case:

instead of:
Code:
ContrIdex_p_mir 	 1 	 765	241225 	 260962
sec_buttonpress 	 2 	 14605

rather:
Code:
ContrIdex_p_mir 	 2 	 14605	241225 	 260962

I hope it becomes more clear what I would like to do.

Thanks a lot for help!

tempestas

Last edited by tempestas; 06-12-2011 at 08:18 AM..
 

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 08:23 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy