nextflow中文文档(1):开始使用
系统要求
Nextflow可以用于任何POSIX兼容系统(Linux, OS X等)。它需要安装Bash 3.2(或更高版本)和Java 8(或更高版本,最多15)。
在计算机集群中执行时,需要使用共享文件系统来共享任务输入/输出文件。
Windows system is supported through WSL.
安装
1.下载
$ wget -qO- https://get.nextflow.io | bash
or
$ curl -s https://get.nextflow.io | bash
这将在当前目录中创建nextflow主可执行文件。
2.make
$ chmod +x nextflow
通过运行chmod +x nextflow在您的系统上创建二进制可执行文件。
3.添加到环境变量(Optional)
将nextflow文件移动到您的$PATH变量可访问的目录中(这只是为了避免在每次运行nextflow时记住并输入完整的路径)。
!Tip
设置export CAPSULE_LOG=none以减少依赖项安装日志的冗长性。
!Note
为了避免下载依赖项,您还可以为每个Nextflow发布版本使用从Github提供的Nextflow - version -all发行版。
- 在Github发布页面找到所需的版本,复制 nextflow-VERSION-all 版本的URL,并在终端上下载:wget -qO- ASSET-URL。它将在当前目录中创建所有包含的nextflow-VERSION-all可执行文件。
升级更新
nextflow self-update
!Tip
您可以临时切换或坚持使用特定版本的Nextflow,只需要在Nextflow命令前加上NXF_VER环境变量。例如
NXF_VER=20.04.0 nextflow run hello
Stable和Edge版本
Nextflow的稳定版本将在每年的第1季度和第3季度发布,基本时间表为6个月。除了稳定版本,Edge版本还会按月发布。这个版本用于测试和使用最新的更新和实验特性。要使用最新的Edge版本,请在shell终端中运行以下代码:
export NXF_EDGE=1
nextflow self-update
你的第一个脚本
复制下面的示例复制并保存成名为tutorial.nf的文件中。
#!/usr/bin/env nextflow
params.str = 'Hello world!'
process splitLetters {
output:
file 'chunk_*' into letters
"""
printf '${params.str}' | split -b 6 - chunk_
"""
}
process convertToUpper {
input:
file x from letters.flatten()
output:
stdout result
"""
cat $x | tr '[a-z]' '[A-Z]'
"""
}
result.view { it.trim() }
这个脚本定义了两个过程。第一个将字符串分割成6个字符的块,每个块以chunk_ 为前缀写入一个文件,第二个接收这些文件并将其内容转换为大写字母。结果字符串在 result 通道上发出,最终输出由 view 操作符打印。
在终端中输入以下命令来执行脚本:
nextflow run tutorial.nf
它将输出类似于下面所示的文本:
N E X T F L O W ~ version 19.04.0
executor > local (3)
[69/c8ea4a] process > splitLetters [100%] 1 of 1 ✔
[84/c8b7f1] process > convertToUpper [100%] 2 of 2 ✔
HELLO
WORLD!
可以看到,第一个进程执行一次,第二个进程执行两次。最后打印结果字符串。
值得注意的是,进程convertToUpper是并行执行的,因此不能保证处理第一次分割的实例(the chunk Hello)会在处理第二次分割的实例(the chunk world!)之前执行。
因此,完全有可能以不同的顺序打印出最终结果:
WORLD!
HELLO
!Tip
十六进制数,如22/7548fa,标识唯一的进程执行。这些数字也是每个进程执行的目录的前缀。您可以检查将文件更改到目录$PWD/work所生成的文件,并使用这些数字来查找进程的执行路径。
修改和恢复
Nextflow跟踪管道中执行的所有进程。如果修改脚本的某些部分,则只会重新执行实际更改的流程。未更改的进程的执行将被跳过,并使用缓存的结果。
这在测试或修改部分管道时很有帮助,因为不用从头开始重新执行它。
为了完成本教程,请修改前面示例中的convertToUpper进程,将进程脚本替换为字符串rev $x,使进程看起来如下所示
process convertToUpper {
input:
file x from letters
output:
stdout result
"""
rev $x
"""
}
然后以相同的名称保存文件,并通过在命令行中添加-resume选项来执行它
nextflow run tutorial.nf -resume
它将打印类似的输出结果:
N E X T F L O W ~ version 19.04.0
executor > local (2)
[69/c8ea4a] process > splitLetters [100%] 1 of 1, cached: 1 ✔
[d0/e94f07] process > convertToUpper [100%] 2 of 2 ✔
olleH
!dlrow
您将看到实际上跳过了进程splitLetters的执行(进程ID是相同的),并从缓存中检索其结果。第二个进程按预期执行,打印反转的字符串。
!Tip
管道结果默认缓存在目录$PWD/work中。根据您的脚本,这个文件夹可能会占用大量磁盘空间。如果您确定不会恢复管道执行,请定期清理此文件夹。
管道参数
管道参数的声明只需在变量名前加上前缀参数,由点字符分隔。它们的值可以在命令行上指定,方法是在参数名称前加上一个双破折号,即--paramName
在本教程中,您可以尝试执行前面的示例,指定不同的输入字符串参数,如下所示:
nextflow run tutorial.nf --str 'Bonjour le monde'
命令行上指定的字符串将覆盖参数的默认值。输出是这样的:
N E X T F L O W ~ version 19.04.0
executor > local (4)
[8b/16e7d7] process > splitLetters [100%] 1 of 1 ✔
[eb/729772] process > convertToUpper [100%] 3 of 3 ✔
m el r
edno
uojnoB
!Tip
从20.11.0版开始,参数名称中的任何.
(点)字符被解释为分隔符或嵌套作用域,例如--foo.bar Hello
将以params.foo.bar的形式从脚本中访问。如果你想要一个参数名包括.
(点)字符使用反斜杠字符转义,例如--foo\.bar Hello