
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
私はこの例を$var1
andとは無関係にしました$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") -
答え2
すべての操作を繰り返します。
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 )
< <( some command together )
出力をsome command together
whileループにリダイレクトします。