Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unix code wanted to copy template file and replace strings in template file in the copied files

Tags:

bash

sed

I have 2 files:

File_1.txt:

John
Mary
Harry
Bill

File_2.txt:

My name is ID, and I am on line NR of file 1.

I want to create four files that look like this:

Output_file_1.txt:

My name is John, and I am on line 1 of file 1.

Output_file_2.txt:

My name is Mary, and I am on line 2 of file 1.

Output_file_3.txt:

My name is Harry, and I am on line 3 of file 1.

Output_file_4.txt:

My name is Bill, and I am on line 4 of file 1.

Normally I would use the following sed command to do this:

for q in John Mary Harry Bill
do  
sed 's/ID/'${q}'/g' File_2.txt > Output_file.txt
done

But that would only replace the ID for the name, and not include the line nr of File_1.txt. Unfortunately, my bash skills don't go much further than that... Any tips or suggestions for a command that includes both file 1 and 2? I do need to include file 1, because actually the files are much larger than in this example, but I'm thinking I can figure the rest of the code out if I know how to do it with this hopefully simpler example... Many thanks in advance!

like image 874
Abdel Avatar asked Dec 05 '22 17:12

Abdel


1 Answers

How about:

n=1
while read q
  do  
  sed -e 's/ID/'${q}'/g' -e "s/NR/$n/" File_2.txt > Output_file_${n}.txt
  ((n++))
done < File_1.txt

See the Advanced Bash Scripting Guide on redirecting input to code blocks, and maybe the section on double parentheses for further reading.

like image 132
blahdiblah Avatar answered May 18 '23 22:05

blahdiblah