组合包含在由新行分隔的变量中的字符串
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
的数组 aryA
,
aryA[1]=two
,依此类推。
- 然后通过追加数组的元素创建变量
final
。
希望对您有所帮助。
我想我会选择:
paste <(echo "$A") <(echo "$B") <(echo "$C") \
| awk '{printf "%s - %s [%s]; ", , , }'
我在 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
的数组aryA
,aryA[1]=two
,依此类推。 - 然后通过追加数组的元素创建变量
final
。
希望对您有所帮助。
我想我会选择:
paste <(echo "$A") <(echo "$B") <(echo "$C") \
| awk '{printf "%s - %s [%s]; ", , , }'