Bash script "concatenate" multi-lined variables
awk, bash, echo, shell
Solution
`paste` is your friend:
$ paste -d' ' <(echo "$a") <(echo "$b") <(echo "$c")
one dog blue
two cow red
three fish green
Noting that `$a` is got through `a=$(cat a)`, with the file `a` containing the lines your provided. The same applies to `$b` and `$c`. Also, it is important to see that I am doing `echo "$a"`, with quotes around the variable, so that the format is kept. Otherwise, the new lines wouldn't appear.
`paste` does not allow `-d''` (that is, empty delimiter), so if you want to remove the spaces you can pipe to for example `tr`:
$ paste -d' ' <(echo "$a") <(echo "$b") <(echo "$c") | tr -d ' '
onedogblue
twocowred
threefishgreen
Problem
In a bash script I have three variables that contain multiple lines of equal length. For example: ``` $a one two three $b dog cow fish $c blue red green ``` In what way could I echo the output to a similar format: ``` onedogblue twocowred threefishgreen ``` I tried a for loop of looping through each variable and echoing each line, but was not getting the desired result. Any advice? EDITING FOR MORE ACCURACY So my script will be run with a text file as an argument (./script.sh textfile) I have three variables with similar content to this variable: ``` #!/bin/sh x=`awk 'NR>1{print $1}' $1 | tr '[:upper:]' '[:lower:]'` ``` I am manipulating the same text file from the command argument to get different parts of the file. Ultimately want to "paste" them together in this format "$x" : "$y""$z. I know there are probably more sensible ways to process the text file into the format desired, but I would like to find if there is such a way to format it in the way listed above.