在 bash 中创建一个循环脚本,其中 2 个变量递增,第二个变量根据第一个变量递增

Create a loop script in bash in which 2 variables are incremented, the second one according to the first variable

我需要创建一个循环来增加 2 个变量(数值),一个根据另一个增加,并且都与我必须发送到集群的作业相关。

基本上我必须创建各种组,这些组由这两个变量定义;例如第一组从 1 到 10(1 是第一个变量,10 是第二个变量),第二组是 11-20 等等......

我正在创建 169 个组,因为我有 1690 个人,并且我 运行 Chromopainter 脚本 169 次(每个组一个)。

我想告诉我的剧本:

给定初始变量 1 和 10,执行脚本,为每个变量递增 10,然后再次执行脚本(循环)。 我知道要增加变量我可以这样做:

for i in {0..159..10}
for j in {10..169..10}

但我无法将它应用到整个事情上。这是我到目前为止写的:

for count in {1..169}
do
    sbatch -J estimate.chr1 -o estimate.chr1.out -e estimate.chr1.error --wrap="module load ChromoPainter/2;
ChromoPainterv2 -g filename.chr1.phase -r fil.recombfile -t IDFILE_FORMAT.txt -o filename.chr1._ChPestimate.$count -a $i $j -i 15 -in -iM"
done

如果我想单独发送脚本,对于第一组,它会像这样工作:

ChromoPainterv2 -g filename.chr1.phase -r fil.recombfile -t IDFILE_FORMAT.txt -o filename.chr1._ChPestimate.$count -a 1 10 -i 15 -in -iM

有什么想法吗?提前谢谢你

loop to make 2 variables (numerical) increase, one according to the other

1 to 10 (1 would be the 1st variable, 10 the 2nd),

所以只要除以10,就是线性关系

for count in {1..169}; do
   i=$count
   j=$(( 1 + (i - 1) / 10 ))
   printf "%d %d\n" "$i" "$j"
done

我认为你在这个问题上过度设计了。 使用您的 $count 作为您需要的其他号码的主要来源。并以零为基础简化了微积分:

for count in {0..168}
do
    i=$((count*10+1))
    j=$(((count+1)*10))
    
    sbatch -J estimate.chr1 -o estimate.chr1.out -e estimate.chr1.error --wrap="module load ChromoPainter/2; ChromoPainterv2 -g filename.chr1.phase -r fil.recombfile -t IDFILE_FORMAT.txt -o filename.chr1._ChPestimate.$((count+1)) -a $i $j -i 15 -in -iM"
done