1

我遇到了 .command.sh 之类的错误:第 2 行:意外标记附近的语法错误 `('

/*
  * Step 3
  */

 chr_length = file(params.chr_length)


 process create_bedgraph_and_bigwig {

     publishDir "${params.outdir}/bedgraphandbigwig", mode: 'copy'

     input:
     set val(sample_id), file(vector_log) from vector_log_ch
     set val(sample_id), file(target_query_bam) from target_query_bam_ch
     file chr_length

     output:
     set val(sample_id), file("${sample_id}.bedgraph.log.txt") into bed_log_ch
     set val(sample_id), file("${sample_id}.bed") into bed_ch
     set val(sample_id), file("${sample_id}.clean.bed") into clean_bed_ch
     set val(sample_id), file("${sample_id}.fragments.bed") into fragments_bed_ch
     set val(sample_id), file("${sample_id}.sorted.fragments.bed") into sorted_fragments_bed_ch


     shell:


     '''

     def fp = file(${vector_log})
     def lines = fp.readLines()
     def line3 = lines[3].split(' ')[4].toInteger()
     def line4 = lines[4].split(' ')[4].toInteger()
     def aln_sum = (10000/(line3 + line4)).toString()



     bedtools bamtobed -bedpe -i !{target_query_bam} > !{sample_id}.bed 2>!{sample_id}.bedgraph.log.txt
     awk '$1==$4 && $6-$2 < 1000 {{print $0}}' !{sample_id}.bed > !{sample_id}.clean.bed 2>!{sample_id}.bedgraph.log.txt
     cut -f 1,2,6 !{sample_id}.clean.bed > !{sample_id}.fragments.bed 2>!{sample_id}.bedgraph.log.txt
     sort -k 1,1 !{sample_id}.fragments.bed > !{sample_id}.sorted.fragments.bed

     '''

 }
4

1 回答 1

0

如果变量需要在 shell 定义或模板中使用,简单的答案是避免使用“def”。在快速搜索文档后我实际上找不到这个,但我确实从作者那里找到了这个注释:

使用 groovy 本机字符串插值可以工作,但是当使用 !{..} 语法时,脚本变量不能使用 def 关键字在本地声明。

总结一下:

  • 脚本/shell 变量应该在本地范围内使用 def 键盘进行防御性声明

  • 在以下情况下不要使用 def:

    一世。变量需要作为输出值引用

    ii. 该变量需要在 shell 模板中使用

https://github.com/nextflow-io/nextflow/issues/678#issuecomment-386206123

于 2020-12-16T10:47:43.667 回答