ループ変数出力と変数入力を1行にまとめます。

ループ変数出力と変数入力を1行にまとめます。
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;

ループの出力は次のとおりです。

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

今、私はすべての変数を組み合わせて次のようにしたいと思います。

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

注 - 出力を一時ファイルにリダイレクトしたくなく、記録する最後の出力を生成したいと思います。

ベストアンサー1

私はこの例を$var1andとは無関係にしました$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

この出力は次のようになります。

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

printfその行のコマンドを目的echo ldap result for $iのコマンドに置き換えます(例:)ldapsearch -xyx $i

注:(bashの代わりに)zshを使用すると配列がサポートされるため、はるかに簡単になります。

代替コマンドベースのpasteソリューション(間隔をあまり制御できない):

#!/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") -

おすすめ記事