목록의 각 요소는 서로 다른 횟수로 반복됩니다.

목록의 각 요소는 서로 다른 횟수로 반복됩니다.

목록이 두 개 있어요

chr=(1 2 3)  # either chr=(1 2 3) or chr=({1..3}) is fine
pos=(2 3 5)

나는 출력을 원한다

 1
 1
 2
 2
 2
 3 
 3
 3
 3
 3

한 목록의 첫 번째 요소는 다른 목록의 첫 번째 요소와 동일한 횟수로 반복됩니다. 다른 라인으로 출력합니다.

제 생각에는

for i in "${chr[@]}"; for p in "${pos[@]}"; eval printf \"\$i%.0s \" {1..$p};done; done

그리고

while read line; do for i in {1.."${pos[@]}"}; do echo "$line"; done; done < chr.list

답변1

for i in ${!chr[@]}; do for j in $(seq ${pos[i]}); do echo "${chr[i]}"; done; done

첫 번째 루프는 인덱스를 할당합니다 0, 1, 2( i를 사용할 수도 있음 ${!pos[@]}).
두 번째 루프는 지정된 인덱스의 값을 가져 pos와서 반복 시퀀스(2x, 3x, 5x)를 생성하고 chr지정된 인덱스의 값을 인쇄합니다.

답변2

그리고 zsh:

for c count (${chr:^pos}) repeat $count printf '%s\n' $c

관련 정보