Nextflow 进程中的 LexerNoViableAltException 替换为 perl

LexerNoViableAltException in Nextflow process with perl substitute

提问人:Ryan 提问时间:9/7/2023 更新时间:9/8/2023 访问量:116

问:

我正在尝试运行一个perl单行代码来对文件执行替换,但似乎在perl数字字符处得到一个。groovyjarjarantlr4.v4.runtime.LexerNoViableAltException

我的脚本块是:

script:
"""
perl -pi -e 's/(\d+\.\d+)/sprintf "%.0f", $1/eg' myFile.txt
"""

当我运行该过程时,出现错误:

unknown recognition error type: groovyjarjarantlr4.v4.runtime.LexerNoViableAltException
ERROR ~ Module compilation error
- file : /home/ryan/pipelines/nf-18S-pipeline/./modules/qiime2_merge_feature_tables.nf
- cause: token recognition error at: 'd+\.' @ line 27, column 22.
       perl -pi -e 's/(\d+\.\d+)/sprintf "%.0f", $1/eg' myFile.txt
                        ^

1 error

我在脚本块中的其他perl单行代码中没有遇到任何问题,例如:

perl -pi -e 's/\t/,/g' myFile.txt

所以我希望这能起作用。到目前为止,我还没有在网上找到任何有用的东西。

正则表达式 Perl NextFlow

评论

0赞 Patrick Janser 9/7/2023
你正在运行Perl版本吗?我没有收到这个错误,在CygWin上尝试了“perl 5,版本36,subversion 1(v5.36.1)为x86_64-cygwin-threads-multi构建”。在 Ubuntu 上也可以“perl 5,版本 32,subversion 1 (v5.32.1) 为 x86_64-linux-gnu-thread-multi” 构建”。
0赞 Patrick Janser 9/7/2023
您的 text 文件有多大?
0赞 Ryan 9/8/2023
@PatrickJanser我正在运行 5.26.1,实际的 perl 工作正常,只是不在 nextflow 的脚本块中,所以它更有可能是一个时髦的问题。
0赞 Miller 9/10/2023
问题在于 nextflow 试图在执行 perl 之前过早地插值。你说使用有效,但那是因为可能过早地插值为制表符,然后仍然在正则表达式中工作。回避但不能解决这个问题的一种方法是 更改为 字符类 。\d\t\t\d[0-9]

答:

0赞 Pallie 9/7/2023 #1

我认为时髦字符串中的单个反斜杠可以作为转义字符。你可以试着把你的转义到 .不完全确定这是否是答案,因为我无法在这台机器上测试它。\\\

评论

0赞 Ryan 9/8/2023
谢谢@Pallie我尝试过双反斜杠(我应该在原始帖子中提到),但它没有解决问题。我发布的另一个 Perl 单行代码在 nextflow 中按原样工作,所以它似乎不是斜杠,而是与自身有关\d
1赞 Patrick Janser 9/8/2023 #2

您是否尝试过使用单引号块?

script:
'''
perl -pi -e 's/(\d+\.\d+)/sprintf "%.0f", $1/eg' myFile.txt
'''

不确定,但可能仍然需要反斜杠转义, 根据这个讨论。 您的另一个示例可能有效,因为被替换为 一个制表字符,可能不会破坏模式。 所以也用这个来测试一下:\t

script:
'''
perl -pi -e 's/(\\d+\\.\\d+)/sprintf "%.0f", $1/eg' myFile.txt
'''

根据文档,如果使用双引号块则 你必须转义,否则它将被视为 Nextflow 变量。$1\$1