在bash中创建一个循环脚本,其中2个变量递增,第二个变量根据第一个变量[重复]
Posted
技术标签:
【中文标题】在bash中创建一个循环脚本,其中2个变量递增,第二个变量根据第一个变量[重复]【英文标题】:Create a loop script in bash in which 2 variables are incremented, the second one according to the first variable [duplicate] 【发布时间】:2021-12-27 12:15:44 【问题描述】:我需要创建一个循环来增加 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
有什么想法吗?提前谢谢你
【问题讨论】:
1st group goes from 1 to 10 (1 would be the 1st variable, 10 the 2nd), the 2nd group 21-30
11 到 20 会发生什么?我不明白。你能post你想生成的pairs个数吗?你想要配对(1,1),(1,2),(1,3),...(1,10),(2,11)(2,12)....(2,20),(3,21)...(3,30) etc.
?
是的,抱歉,这是分心的错误。第二组是 11 到 20
【参考方案1】:
循环使2个变量(数值)增加,一个根据另一个
1 到 10(1 是第一个变量,10 是第二个变量),
所以只要除以 10,关系就是线性关系。
for count in 1..169; do
i=$count
j=$(( 1 + (i - 1) / 10 ))
printf "%d %d\n" "$i" "$j"
done
【讨论】:
非常感谢,我现在正在运行上面发布的版本(需要几个小时),然后我将验证日志。你的版本看起来也很有用【参考方案2】:我认为你过度设计了这个问题。
使用您的$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
【讨论】:
非常感谢,我现在正在运行它(需要几个小时),然后我会查看日志以验证它是如何工作的。到目前为止,它看起来运行正常以上是关于在bash中创建一个循环脚本,其中2个变量递增,第二个变量根据第一个变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章