목록이 두 개 있어요
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