组合包含在由新行分隔的变量中的字符串

Combine strings contained in variables delimited by a new line

我在 Bash 中有三个变量,它们都包含由换行符分隔的字符串,例如:

变量A:

one
two
three

变量 B:

Mon
Tue
Wed

变量 C:

10
11
12

这三个变量始终包含完全相同数量的元素,并用新行分隔。

我的目标是从变量 A 中取出一行(从第一行开始),在中间添加一些文本,然后从变量 B 中取出一行,再次在中间添加一些文本,最后,取出一行从变量 C 并在末尾添加一些文本。然后,我想将这个结果附加到最终变量,比如说 $final,循环结束后(即,我们已经遍历了所有行),应该如下所示:

one - Mon [10]; two - Tue [11]; three - Wed [12]

awk 能做到这一点还是我应该使用其他工具?

请您尝试以下操作:

# assign the variables
variableA="one
two
three"

variableB="Mon
Tue
Wed"

variableC="10
11
12"

# transform the variables to arrays
readarray -t aryA <<< "$variableA"
readarray -t aryB <<< "$variableB"
readarray -t aryC <<< "$variableC"

# construct the variable $final
for ((i=0; i<3; i++)); do
    final+="${aryA[$i]} - ${aryB[$i]} [${aryC[$i]}]; "
done

# remove trailing semicolon and whitespace
final="${final%;*}"

echo "$final"

输出:

one - Mon [10]; two - Tue [11]; three - Wed [12]

[说明]

  • readarray(或mapfile)逐行读取标准输入 并将每一行放在一个数组元素中。
  • 也就是说,如果将包含三行的variableA馈送到readarray, 然后创建包含 aryA[0]=one 的数组 aryAaryA[1]=two,依此类推。
  • 然后通过追加数组的元素创建变量 final

希望对您有所帮助。

我想我会选择:

paste <(echo "$A") <(echo "$B") <(echo "$C") \
| awk '{printf "%s - %s [%s]; ", , , }'