【问题标题】:Snakemake: inserting sample name before every input file in one ruleSnakemake:在一个规则中的每个输入文件之前插入样本名称
【发布时间】:2021-05-28 18:53:04
【问题描述】:

我正在尝试为生物信息学工具 FMAP 创建规则文件。 https://github.com/jiwoongbio/FMAP

我一直在为FMAP_table.pl 脚本创建规则。这是我目前的规则:

rule fmap_table:
    input:
        expand(str(CLASSIFY_FP/"mapping"/"{sample}_abundance.txt"), sample=Samples.keys())
    output:
        str(CLASSIFY_FP/'mapping'/'abundance_table.txt')
    shell:
        """
        perl /media/data/FMAP/FMAP_table.pl {input} > {output}
        """

我希望我的列名仅包含示例名称,而不是整个路径。这可以在这样的脚本中完成

perl FMAP_table.pl [options] [name1=]abundance1.txt [[name2=]abundance2.txt [...]] > abundance_table.txt 

我的问题是如何为每个示例文件选择示例名称、示例的路径并在其间添加 =。

我的样本是这样命名的SAMPLE111_S1_abundance.txt这是我想自动实现的格式:

perl /media/data/FMAP/FMAP_table.pl SAMPLE111_S1 = SAMPLE111_S1_abundance.txt SAMPLE112_S2 = SAMPLE112_S2.abundance.txt [etc.] > abundance.txt"

谢谢

【问题讨论】:

  • 运行命令时遇到什么错误?我不熟悉 FMAP,但看起来你不应该在等号的两边都有空格。而不是SAMPLE111_S1 = SAMPLE111_S1_abundance.txt 尝试SAMPLE111_S1=SAMPLE111_S1_abundance.txt
  • 我没有得到错误,当我运行这样的命令时: perl /media/data/FMAP/FMAP_table.pl {input} > {output} 这将创建一个表,其中列名将是每个输入文件的绝对路径。这使表格更难阅读,也使下游分析复杂化。我可以指定像这样的文件名 perl /media/data/FMAP/FMAP_table.pl SAMPLE111_S1 = SAMPLE111_S1_abundance.txt SAMPLE112_S2 = SAMPLE112_S2.abundance.txt [etc.] > enhancement.txt" 问题是,我经常有 50 个或更多样本所以我想自动化它而不是写下每个文件的名称

标签: python perl snakemake


【解决方案1】:

我可能会添加一个参数来构建它,也可能在外部构建 dict 中的文件名:

FMAP_INPUTS = {sample: str(CLASSIFY_FP/"mapping"/"{sample}_abundance.txt")
               for sample in Samples.keys()}

rule fmap:
    input: FMAP_INPUTS.values()
    output:
        str(CLASSIFY_FP/'mapping'/'abundance_table.txt')
    params:
        names=" ".join(f"{s}={f}" for s,f in FMAP_INPUTS.items())
    shell:
        """
        perl /media/data/FMAP/FMAP_table.pl {params.names} > {output}
        """

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 2021-12-29
    相关资源
    最近更新 更多