假设我使用grep和cut来将数据存储到变量中。我需要将每个变量的第一个第二个和第三个值相互连接起来。我想我需要使用数组来实现这一目标,但我不知道如何去做。例如,如果$ 1持有b c而$ 2持有1 2 3且$ 3持有x y z我想连接以便我的输出看起来像a1x b2y c3z。就像我说我认为我需要将我的grep / cut输出存储到一个数组中,但我不知道该怎么做。感谢。
答案 0 :(得分:1)
在纯粹的bash中,你可以这样做:
v1="a b c"
v2="1 2 3"
v3="x y z"
for v in v1 v2 v3; do
read p1 p2 p3 <<< ${!v}
a1="$a1$p1"
a2="$a2$p2"
a3="$a3$p3"
done
echo $a1
echo $a2
echo $a3
最后三个回声输出:
a1x
b2y
c3z
答案 1 :(得分:0)
您可以使用sed
,tr
等将' '
翻译为'\n'
。
然后使用paste
垂直连接它们。
$ v1="a b c"
$ v2="1 2 3"
$ v3="x y z"
$ paste <(tr ' ' '\n' <<<$v1) <(tr ' ' '\n' <<<$v2) <(tr ' ' '\n' <<<$v3) | tr -d '\t'
a1x
b2y
c3z
或者
$ paste <(echo "${v1// /$'\n'}") <(echo "${v2// /$'\n'}") <(echo "${v3// /$'\n'}") | tr -d '\t'
a1x
b2y
c3z
注意:如果将它们保存在单独的文件中,则会更容易。
答案 2 :(得分:0)
使用数组的纯bash中的另一种解决方案:
$ arr=( $v1 $v2 $v3 )
$ for ((i=0; i<3; i++)); do
for ((j=i; j<${#arr[@]}; j+=3)); do printf '%s' ${arr[j]}; done
echo
done
a1x
b2y
c3z
答案 3 :(得分:0)
使用数组进行Pure bash:
declare -a a=( $v1 $v2 $v3 )
echo "${a[0]}${a[3]}${a[6]}"
echo "${a[1]}${a[4]}${a[7]}"
echo "${a[2]}${a[5]}${a[8]}"
答案 4 :(得分:0)
这可能对您有用:
v1="a b c"
v2="1 2 3"
v3="x y z"
parallel --xapply echo {1}{2}{3} ::: $v1 ::: $v2 ::: $v3
a1x
b2y
c3z