提问人:Ryan 提问时间:9/7/2023 更新时间:9/8/2023 访问量:116
Nextflow 进程中的 LexerNoViableAltException 替换为 perl
LexerNoViableAltException in Nextflow process with perl substitute
问:
我正在尝试运行一个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
所以我希望这能起作用。到目前为止,我还没有在网上找到任何有用的东西。
答:
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
评论
\d
\t
\t
\d
[0-9]