如何在Nextflow中使用fromSRA函数读取tsv的SRA编号下载FastQ文件
问题原因
你在fetchRunAccession进程中声明了输出文件accessions,但执行的命令仅将结果打印到标准输出,没有写入到名为accessions的文件中,Nextflow找不到预期的输出文件因此抛出报错。
另外你写的displayResult进程也存在逻辑问题:输入的accessions是文件路径,直接echo只会打印文件名,无法输出文件内的登录号内容。
修复后的完整代码
#!/home/someuser/bin nextflow nextflow.enable.dsl=2 params.datalist = "$baseDir/datalist.tsv" process fetchRunAccession { input: path dlist output: path "accessions" """ cut -f4 $dlist | sed -n 2,11p > accessions """ } process displayResult { input: path accessions output: stdout """ cat $accessions """ } workflow { accessions_p = fetchRunAccession(params.datalist) result = displayResult(accessions_p) result.view() }
对接fromSRA的更优写法
你不需要单独写进程来提取登录号,可以直接用Nextflow内置的TSV读取能力直接生成符合fromSRA要求的ID通道,性能更好也更易维护:
#!/home/someuser/bin nextflow nextflow.enable.dsl=2 params.datalist = "$baseDir/datalist.tsv" // 直接提取登录号通道 Channel.fromPath(params.datalist) .splitCsv(sep: '\t', header: true) // 按TSV格式读取,自动识别表头 .map { it.run_accession } // 提取run_accession列的值 .take(10) // 取跳过表头后的前10条,对应原sed 2,11p的效果 .set { sra_ids } // 后续直接调用fromSRA即可 Channel.fromSRA(sra_ids).view()
内容的提问来源于stack exchange,提问作者PPrasai
相关产品推荐
相关产品推荐

