将存储在变量中的字符串并排连接起来

将存储在变量中的字符串并排连接起来

我有两个包含一组字符串的变量。我需要将这些变量的结果连接起来并排显示。

变量a有:

t
t
t

变量b有:

xyz
pqr
stu

我需要得到输出

txyz
tpqr
tstu 

答案1

在 bash 中,你可以使用进程替换来执行此操作paste

$ a='t                                 
t
t'
$ b='xyz                               
pqr
stu'
$ paste <(echo "$a") <(echo "$b") -d ''
txyz
tpqr
tstu

如果您想要的只是t在 或 的行前加上前缀bawksed可以这样做:

$ printf "%s" "$b" | awk '{printf "t"}1'
txyz
tpqr
tstu

答案2

使用paste过程替换:

paste -d '' <(echo "$a") <(echo "$b")
  • <()是进程替换模式,里面命令的输出将被文件描述符替换,这是需要的,因为paste需要将文件作为输入

  • d ''根据需要将分隔符设置为空

例子:

$ echo "$a"
t
t
t

$ echo "$b"
xyz
pqr
stu

$ paste -d '' <(echo "$a") <(echo "$b")
txyz
tpqr
tstu

答案3

我不确定它的效率如何,但一个可能的纯 bash 解决方案可能是

while IFS= read -r -u3 x; IFS= read -r -u4 y; do 
  printf '%s%s\n' "$x" "$y"; 
done 3<<<"$a" 4<<<"$b"

答案4

如果你真正想要的只是以 开头的 3 个单词t,你可以这样做:

$ echo $VAR_2 | awk '{print "t"$0}'                                             
txyz
tpqr
tstu

或这个:

$ echo $VAR_2 | sed 's/^/t/g'                                                   
txyz
tpqr
tstu

如果变量中有多个(不同的)单词,它们就不太适合同时处理,因此我建议使用array而不是变量。

$ array1=( 't' 't' 't'  )                                                       


$ array2=('xyz' 'pqr' 'stu' )


$ for i in $(seq 0 2) ; do echo "${array1[$i]}""${array2[$i]}" ; done
txyz
tpqr
tstu

相关内容