I have 3 different lists:
Names.txt:
Adam
Josh
Ben
Ages.txt:
18
14
19
Pets.txt:
Dog
Cat
Fish
And i need to build a script in bash to echo the next output:
My name is Adam and my age is 18 and i have a Dog
My name is Josh and my age is 14 and i have a Cat
My name is Ben and my age is 19 and i have a Fish
I need to print all the elements on tge same location in the lists within the same output
CodePudding user response:
Use paste to combine the files
There is the little known paste command. It merges the content of multiple files line for line. So the first part would be
paste Names.txt Ages.txt Pets.txt
Which gives:
Adam 18 Dog
Josh 14 Cat
Ben 19 Fish
Then you use your usual shell tooling to read over that. If you can use awk it would be:
paste Names.txt Ages.txt Pets.txt | awk '{printf("My name is %s and my age is %d and I have a %s\n",$1, $2, $3);}'
If you cannot use awk, a while read loop with a printf command can be used. Again we pipe the paste output into the command:
paste Names.txt Ages.txt Pets.txt | while read name age pet
do
printf "My name is %s and my age is %d and I have a %s\n" $name $age $pet
done
Here the read name age pet reads each line of paste output and assigns the three words in each line to the three variables name, age and pet which are then used as arguments for the printf command.
The while loop executes the printf command as long as read is able to read lines, i.e. the loop stops printing after three lines.
