リストの各要素は異なる回数で繰り返されます。

リストの各要素は異なる回数で繰り返されます。

リストが2つあります。

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, 2i使用することもできます${!pos[@]})。
2番目のループは指定されたインデックスの値をpos取得し、繰り返しシーケンス(2x、3x、5x)を生成し、指定されたchrインデックスの値を印刷します。

答え2

そしてzsh

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

関連情報