루프 변수 출력과 변수 입력을 한 줄로 결합합니다.

루프 변수 출력과 변수 입력을 한 줄로 결합합니다.
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") -

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

관련 정보