我有两个清单
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