对于nextflow,尝试在nextflow块中运行一个循环,以从序列文件名中删除扩展名,并遇到语法错误。
params.rename = "sequences/*.fastq.gz"
workflow {
rename_ch = Channel.fromPath(params.rename)
RENAME(rename_ch)
RENAME.out.view()
}
process RENAME {
input:
path read
output:
stdout
script:
"""
for file in $baseDir/sequences/*.fastq.gz;
do
mv -- '$file' '${file%%.fastq.gz}'
done
"""
}错误:
- cause: Unexpected input: '{' @ line 25, column 16.
process RENAME {
^试图使用其他方法,如basename,但没有效果。
发布于 2022-11-18 05:37:05
在脚本块中,您只需转义Bash美元变量并使用双引号即可展开。例如:
params.rename = "sequences/*.fastq.gz"
workflow {
RENAME()
}
process RENAME {
debug true
"""
for fastq in ${baseDir}/sequences/*.fastq.gz;
do
echo mv -- "\$fastq" "\${fastq%%.fastq.gz}"
done
"""
}结果:
$ nextflow run main.nf
N E X T F L O W ~ version 22.04.0
Launching `main.nf` [crazy_brown] DSL2 - revision: 71ada7b0d5
executor > local (1)
[71/4321e6] process > RENAME [100%] 1 of 1 ✔
mv -- /path/to/sequences/A.fastq.gz /path/to/sequences/A
mv -- /path/to/sequences/B.fastq.gz /path/to/sequences/B
mv -- /path/to/sequences/C.fastq.gz /path/to/sequences/C另外,如果您觉得转义Bash变量很乏味,您可能需要考虑使用壳块。
https://stackoverflow.com/questions/74485079
复制相似问题