【问题标题】:Submitting a job in Slurm using wrap使用 wrap 在 Slurm 中提交作业
【发布时间】:2022-02-23 04:16:08
【问题描述】:


我正在尝试创建用于分析生物数据的自动命令链。
为此,我在 Slurm 集群中使用 Samtools。下面这一行是我为分析运行的命令之一:
samtools view -h file.sam | awk '$6 ~ /N/ || $1 ~ /^@/' | samtools view -h > spliced.file.sam
使用它,我得到了我的预期输出(简单)。
但是,当我想使用--wrap 将命令插入到作业中时,会出现语法错误。
如图所示:

sbatch --wrap "samtools view -h file.sam | awk '$6 ~ /N/ || $1 ~ /^@/' | samtools view -h > sp.file.sam"

    awk:  ~ /N/ ||  ~ /^@/
    awk:  ^ syntax error

在命令开头使用srun,在最后使用&,在提交时很有帮助,但是当我想创建命令管道时可以使用它吗?我可以为这个命令添加依赖项吗?有没有可能的方法来使用
--wrap 这个命令?

我的目标是创建一个自动的命令管道,如下面的链接所示 - https://gencore.bio.nyu.edu/building-an-analysis-pipeline-for-hpc-using-python/

提前致谢。

【问题讨论】:

  • 您是否尝试过在 awk 命令中使用 ` \ ` 转义
  • 在处理大到足以保证使用集群的工作时,使用诸如 nextflow、snakemake 或 Cromwell 之类的工作流框架 :) 这需要一些时间来学习,但最终会节省大量时间。
  • 我从来没有听说过sbatch,所以我可能会走得更远,但听起来好像有什么东西在解释$6$1,然后awk 才能看到它们,所以试着把它们改成@987654332 @ 和 \$1.
  • 那是因为你使用了双引号,并且那里有 $6$1 的 awk 并且那些 $ 运算符需要被转义 \$6\$1 以将它们扩展为父级@EdMorton 提到的外壳也很特别
  • 感谢 Ed Morton 和 αғsнιη 的帮助,它成功了!

标签: awk bioinformatics slurm samtools


【解决方案1】:

最直接的方法是编写

samtools view -h file.sam | awk '$6 ~ /N/ || $1 ~ /^@/' | samtools view -h > spliced.file.sam

shell 脚本的行(例如myscript.sh

#!/usr/bin/env bash

file=${1?Usage: $0 <file.sam>}

samtools view -h "$file" | awk '$6 ~ /N/ || $1 ~ /^@/' | samtools view -h > spliced.file.sam

这样你就可以发布

sbatch --wrap "./myscript.sh file.sam"

无需使用引号管理 shell 转义。这将进一步允许您运行这样的命令

find . -name \*.sam -print0 | xargs -0 -I{} sbatch --wrap "./myscript.sh {}"

这将为在当前目录中找到的每个 .sam 文件提交一个作业,或者在 Python 脚本中使用它,如您提到的参考。

【讨论】:

    【解决方案2】:

    这与单引号无关。你可以这样做

    sbatch --wrap="samtools view | head| awk '{print}'"

    它会正常工作的。

    当您不想将命令保存在 shell 脚本中时,您需要对 AWK 命令中的美元符号进行转义。

    sbatch --wrap "samtools view -h file.sam | awk '\$6 ~ /N/ || \$1 ~ /^@/' | samtools view -h > sp.file.sam"

    错误是:

    awk: ~ /N/ || ~ /^@/

    与您运行的命令相比,字段运算符($6 和 $1)都没有进入 sbatch 提交,这意味着美元符号很可能给您带来了麻烦。我遇到了类似的问题,并且逃避了所有对我有用的 $。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-01
      • 2019-11-24
      • 1970-01-01
      • 2022-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多