Concatena strings armazenadas em variáveis lado a lado

4

Eu tenho duas variáveis que contêm um conjunto de strings. Eu preciso concatenar os resultados dessas variáveis para aparecer lado a lado.

Variável a tem:

t
t
t

Variável b tem:

xyz
pqr
stu

Eu preciso obter a saída como

txyz
tpqr
tstu 
    
por praveen reddy 02.07.2016 / 20:04

4 respostas

6

No bash, você pode fazer isso com a substituição do processo e paste :

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

Se tudo o que você deseja é t , o prefixo das linhas de b , awk ou sed seria:

$ printf "%s" "$b" | awk '{printf "t"}1'
txyz
tpqr
tstu
    
por muru 02.07.2016 / 20:19
4

Usando paste com substituição de processo:

paste -d '' <(echo "$a") <(echo "$b")
  • <() é o padrão de substituição do processo, a saída do comando dentro será substituída por um descritor de arquivo, isso é necessário, pois paste recebe arquivos como entrada

  • d '' define o delimitador como nulo, conforme necessário

Exemplo:

$ echo "$a"
t
t
t

$ echo "$b"
xyz
pqr
stu

$ paste -d '' <(echo "$a") <(echo "$b")
txyz
tpqr
tstu
    
por heemayl 02.07.2016 / 20:19
4

Não sei como isso se compara à eficiência, mas uma possível solução bash pura pode ser

while IFS= read -r -u3 x; IFS= read -r -u4 y; do 
  printf '%s%s\n' "$x" "$y"; 
done 3<<<"$a" 4<<<"$b"
    
por steeldriver 02.07.2016 / 21:25
2

Se tudo que você realmente quer é 3 palavras começando com t , você pode fazer isso:

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

Ou isto:

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

Se você tem várias (e diferentes) palavras em variáveis, elas não se prestam muito bem para processamento simultâneo, então eu sugiro usar array ao invés de variáveis.

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


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


$ for i in $(seq 0 2) ; do echo "${array1[$i]}""${array2[$i]}" ; done
txyz
tpqr
tstu
    
por Sergiy Kolodyazhnyy 04.07.2016 / 02:07