仅在输出中使用 Snakemake 通配符
Snakemake wildcard in output only
我有一个脚本,它接受一个大的输入文件,然后使用不可预测的算法将其分解为从 1 到 n 的多个块。
然后下面的脚本将迭代处理这些块中的每一个。
我如何创建一个 snakemake 规则,该规则基本上声明输出文件将存在于 1 到 n,并且以下脚本应该 运行 对 1 到 n 个输入文件中的每一个都存在一次。
谢谢!
您尝试过设置通配符吗?例如,如果你在文件 1 到 22 上迭代一个规则,你可以在你的 snakemake 文件的顶部设置一个通配符:
num=range(1,23)
然后在您的 snakemake 文件名中使用该通配符或在 {wildcard.num}
中引用它
有dynamic
keyword。可以这样使用:
rule all:
input:
dynamic('{id}.png')
rule draw:
input:
'{id}.txt'
output:
'{id}.png'
shell:
'cp {input} {output}'
rule cluster:
input:
'input.csv'
output:
dynamic('{id}.txt')
shell:
'touch 1.txt 2.txt'
我有一个脚本,它接受一个大的输入文件,然后使用不可预测的算法将其分解为从 1 到 n 的多个块。
然后下面的脚本将迭代处理这些块中的每一个。
我如何创建一个 snakemake 规则,该规则基本上声明输出文件将存在于 1 到 n,并且以下脚本应该 运行 对 1 到 n 个输入文件中的每一个都存在一次。
谢谢!
您尝试过设置通配符吗?例如,如果你在文件 1 到 22 上迭代一个规则,你可以在你的 snakemake 文件的顶部设置一个通配符:
num=range(1,23)
然后在您的 snakemake 文件名中使用该通配符或在 {wildcard.num}
中引用它有dynamic
keyword。可以这样使用:
rule all:
input:
dynamic('{id}.png')
rule draw:
input:
'{id}.txt'
output:
'{id}.png'
shell:
'cp {input} {output}'
rule cluster:
input:
'input.csv'
output:
dynamic('{id}.txt')
shell:
'touch 1.txt 2.txt'