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 루프 로 리디렉션합니다.