在 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
我需要创建一个循环来增加 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