Arrays bash:连接多个变量的第一个值

Arrays bash:连接多个变量的第一个值,arrays,bash,variables,concatenation,Arrays,Bash,Variables,Concatenation,假设我使用grep和cut将数据存储到变量中。我需要将每个变量的第一个、第二个和第三个值连接起来。我想我需要使用数组来实现这一点,但我不知道如何做到这一点。例如,如果$1包含一个bc,$2包含1个23,$3包含x个y个z,我想连接起来,这样我的输出看起来就像a1x个b2y个c3z。正如我所说,我认为我需要将grep/cut输出存储到一个数组中,但我不确定如何做到这一点。谢谢。在纯bash中,您可以执行以下操作: v1="a b c" v2="1 2 3" v3="x y z" for v in

假设我使用grep和cut将数据存储到变量中。我需要将每个变量的第一个、第二个和第三个值连接起来。我想我需要使用数组来实现这一点,但我不知道如何做到这一点。例如,如果$1包含一个bc,$2包含1个23,$3包含x个y个z,我想连接起来,这样我的输出看起来就像a1x个b2y个c3z。正如我所说,我认为我需要将grep/cut输出存储到一个数组中,但我不确定如何做到这一点。谢谢。

在纯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

您可以使用
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
$v1=“a b c”
$v2=“1 2 3”
$v3=“x y z”

$paste纯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
$arr=($v1$v2$v3)

$for((i=0;i使用数组的纯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]}"

这可能适合您:

v1="a b c"
v2="1 2 3"
v3="x y z"
parallel --xapply echo {1}{2}{3} ::: $v1 ::: $v2 ::: $v3
a1x
b2y
c3z

这是一项家庭作业吗?是的,这是一项家庭作业。我对文件行进行了grep处理,并从grep输出中删除了某些字符。谢谢。自从我发布了这个问题后,我将它用于处理数组。3<符号在?
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]}"
v1="a b c"
v2="1 2 3"
v3="x y z"
parallel --xapply echo {1}{2}{3} ::: $v1 ::: $v2 ::: $v3
a1x
b2y
c3z