在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个变量递增,第二个变量根据第一个变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

由 awk 在 bash 中创建的索引变量

有没有办法在 Bash 脚本中创建键值对?

为什么bash动态变量和字符串串联会扰乱/覆盖我的循环输出?

如何在 PL/SQL 中创建一个以时间段递增的循环

在 bash 脚本中创建步骤

在 for 循环中使用 udf 在 Pyspark 中创建多个列