リストが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, 2
(i
使用することもできます${!pos[@]}
)。
2番目のループは指定されたインデックスの値をpos
取得し、繰り返しシーケンス(2x、3x、5x)を生成し、指定されたchr
インデックスの値を印刷します。
答え2
そしてzsh
:
for c count (${chr:^pos}) repeat $count printf '%s\n' $c