我通过两组条形码解复用测序读数。首先,我使用一组条形码来解复用到样本中,接下来,必须使用第二组条形码再次解复用每个样本以获得一些子样本。在每个步骤中,都不知道将生成多少文件,因为我不知道我的所有条形码是否都在读取文件中。似乎使用动态规则的情况。对于我的玩具示例而言,解复用的第一阶段非常简单,其中afile.csv
是一个名称列表,例如>prod1.fastq
,每行一个产品:
rule all:
input: dynamic("{product}.fastq")
rule demux:
input: "afile.csv"
output: dynamic("{product}.fastq")
shell: '''
cd demux
cat ../{input} | sed "s/>//g" | xargs touch
cd ..
'''
现在,我想到了另一个规则demux2
,在这个玩具示例中,每个产品创建2个文件。我一直在尝试失败:
rule all:
input: dynamic("{product2}.fastq")
rule demux:
input: "afile.csv"
output: dynamic("{product}.fastq")
shell: '''
cd demux
echo {input}
cat ../{input} | sed "s/>//g" | xargs touch
cd ..
'''
rule demux2:
input: dynamic("{product}.fastq")
output: dynamic("{product2}.fastq")
shell: '''
echo {input} | sed 's/.fastq/_ITS1.fastq/g' | xargs touch
echo {input} | sed 's/.fastq/_ITS2.fastq/g' | xargs touch
'''
或者替代方案:
rule all:
input: dynamic("{product}_{its}.fastq")
rule demux:
input: "afile.csv"
output: dynamic("{product}.fastq")
shell: '''
cd demux
echo {input}
cat ../{input} | sed "s/>//g" | xargs touch
cd ..
'''
rule demux2:
input: dynamic("{product}.fastq")
output: dynamic("{product}_{its}.fastq")
shell: '''
echo {input} | sed 's/.fastq/_ITS1.fastq/g' | xargs touch
echo {input} | sed 's/.fastq/_ITS2.fastq/g' | xargs touch
'''
关于如何解决这个问题的任何想法。在下一个流程中它很容易,但我想在snakemake中进行,这是使用测序数据最常见的情况之一......