Combina saídas de variáveis de loop junto com entradas variáveis em uma linha [closed]

3
var1=( some command together )    

echo $var1
myserver [email protected] load24 /dev/tty  user1
myserver [email protected] load24 /dev/tty  user2
myserver [email protected] load24 /dev/tty  user3
myserver [email protected] load24 /dev/tty  user4

var2=$( some command together | awk '{print $5}')

echo "$var2"
user1
user2
user3
user4


for i in $var2;
do 
    ldapsearch -xyx $i
done;

A saída do loop será como

DEP AB BC CD EF
dep GH IJ KL MN
DEP OP QR ST UV
DEP WX YZ AC BC

Agora eu quero combinar todos os varibales para parecer

myserver [email protected] load24 /dev/tty  user1 EP AB BC CD EF
myserver [email protected] load24 /dev/tty  user2 dep GH IJ KL MN
myserver [email protected] load24 /dev/tty  user3 DEP OP QR ST UV
myserver [email protected] load24 /dev/tty  user4 DEP WX YZ AC BC

Nota - Eu não quero redirecionar qualquer saída para qualquer arquivo temporário, só quero gerar a última saída para escrever

    
por Kunal Saha 14.08.2016 / 20:51

2 respostas

1

Eu tornei o exemplo autônomo em relação a $var1 e $var2 :

#!/bin/bash

var1=$(for i in 1 2 3 4; do echo "a$i b$i  user$i"; done)
echo "$var1"

var2=$(for i in 1 2 3 4; do echo "user$i"; done)
echo "$var2"

for i in $var2
do
  j=$((j+1))
  line=$(echo "$var1" | head -n $j | tail -n 1)
  printf "%s  %s\n" "$line" "$(echo ldap result for $i)"
done

Esta saída:

a1 b1  user1
a2 b2  user2
a3 b3  user3
a4 b4  user4
user1
user2
user3
user4
a1 b1  user1  ldap result for user1
a2 b2  user2  ldap result for user2
a3 b3  user3  ldap result for user3
a4 b4  user4  ldap result for user4

Na linha printf , basta substituir o comando echo ldap result for $i pelo comando desejado, como ldapsearch -xyx $i .

Nota: com zsh (em vez de bash), isso pode até ser um pouco mais simples devido ao suporte de matrizes.

Uma solução alternativa baseada no comando paste (embora o espaçamento seja menos controlável):

#!/bin/bash

var1=$(for i in 1 2 3 4; do echo "a$i b$i  user$i"; done)
echo "$var1"

var2=$(for i in 1 2 3 4; do echo "user$i"; done)
echo "$var2"

for i in $var2
do
  echo "ldap result for $i"
done | paste <(echo "$var1") -
    
por 14.08.2016 / 23:51
0

Faça tudo em um loop:

while read -r serv addr load tty usr; do
   printf "%s %s %s %s %s %s\n" \
      "${serv}" "${addr}" "${load}" "${tty}" "${usr}" $(ldapsearch -xyx "${usr}")
done < <( some command together )

Com < <( some command together ) você redireciona a saída de some command together para o loop while.

    
por 15.08.2016 / 21:38