【问题标题】:How to submit consecutive bash jobs using another job with a loop如何使用另一个带有循环的作业提交连续的 bash 作业
【发布时间】:2020-02-05 10:09:07
【问题描述】:

我必须对 29 条染色体进行定相(使用 shapeit 软件),所以如果一个可以发送一个调用另一个的作业,文件名相同,只更改染色体编号,那就太好了。 示例 phase.sh

#!/bin/bash
shapeit \
-P chr_1.ped chr_1.map \
--duohmm \
--rho 0.01 \
-O chr_1.phased 

我需要类似其他工作的东西来称呼它

#!/bin/bash
for chr 1...29 
sbatch --phase.sh 
done

非常感谢

【问题讨论】:

  • 你能澄清一下脚本的哪一部分改变了吗?
  • 我不知道如何做第二个 bash 工作(for..),在第一个工作中,我猜应该不是“chr_1.ped chr_1.map”像 "chr_.ped chr_.map" 表示它适用于所有染色体。谢谢!

标签: bash loops jobs


【解决方案1】:

假设您可以将第一个脚本更改为类似

#!/bin/bash
shapeit \
  -P "$1".ped "$1".map \
  --duohmm \
  --rho 0.01 \
  -O "$1".phased

然后调用它sbatch(或者是phase.sh?),然后你可以调用它

for chr in {1..29}; do
  sbatch --phase.sh "chr_$chr"
done

当然,更好的设计可能是更改第一个脚本以在您传递的参数上运行循环;

for chr; do
  shapeit \
    -P "$chr".ped "$chr".map \
    --duohmm \
    --rho 0.01 \
    -O "$chr".phased
done

然后像这样称呼它

thatscript chr_{1..29}

【讨论】:

    【解决方案2】:

    您的phase 脚本可以通过这种方式更改:

    #!/bin/bash
    shapeit \
    -P $1.ped $1.map \
    --duohmm \
    --rho 0.01 \
    -O $1.phased 
    

    你可以这样调用它:

    #!/bin/bash
    for chr in $(seq 1 29)
    do
    phase.sh chr_$chr
    done
    

    【讨论】:

    • @tripleee,这取决于,因为目前我们控制变量引号是多余的。如果我们谈论可以在输出中获得额外空间的命令或带有特殊字符的文件名就可以了。
    • 我们有太多答案,只是假设人们不会使用真实世界的文件名。修复它们通常比添加警告更容易,并且可以教会人们正确使用引用。
    • @tripleee,本次讨论的方向是“提出好问题的艺术”:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多