列表中的每个元素重复不同的次数

列表中的每个元素重复不同的次数

我有两个清单

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[@]})。
第二个循环采用给定索引处的值pos并创建重复序列(2x、3x、5x)并打印给chr定索引处的值。

答案2

zsh

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

相关内容