nextflow中文文檔(1):開始使用

系統(tǒng)要求

Nextflow可以用于任何POSIX兼容系統(tǒng)(Linux, OS X等)。它需要安裝Bash 3.2(或更高版本)和Java 8(或更高版本,最多15)。
在計(jì)算機(jī)集群中執(zhí)行時(shí),需要使用共享文件系統(tǒng)來共享任務(wù)輸入/輸出文件。
Windows system is supported through WSL.

安裝

1.下載

$ wget -qO- https://get.nextflow.io | bash
or
$ curl -s https://get.nextflow.io | bash

這將在當(dāng)前目錄中創(chuàng)建nextflow主可執(zhí)行文件。
2.make

$ chmod +x nextflow

通過運(yùn)行chmod +x nextflow在您的系統(tǒng)上創(chuàng)建二進(jìn)制可執(zhí)行文件。
3.添加到環(huán)境變量(Optional)
將nextflow文件移動(dòng)到您的$PATH變量可訪問的目錄中(這只是為了避免在每次運(yùn)行nextflow時(shí)記住并輸入完整的路徑)。

!Tip

設(shè)置export CAPSULE_LOG=none以減少依賴項(xiàng)安裝日志的冗長(zhǎng)性。

!Note

為了避免下載依賴項(xiàng),您還可以為每個(gè)Nextflow發(fā)布版本使用從Github提供的Nextflow - version -all發(fā)行版。

  1. Github發(fā)布頁面找到所需的版本,復(fù)制 nextflow-VERSION-all 版本的URL,并在終端上下載:wget -qO- ASSET-URL。它將在當(dāng)前目錄中創(chuàng)建所有包含的nextflow-VERSION-all可執(zhí)行文件。

升級(jí)更新

nextflow self-update

!Tip

您可以臨時(shí)切換或堅(jiān)持使用特定版本的Nextflow,只需要在Nextflow命令前加上NXF_VER環(huán)境變量。例如

NXF_VER=20.04.0 nextflow run hello

Stable和Edge版本

Nextflow的穩(wěn)定版本將在每年的第1季度和第3季度發(fā)布,基本時(shí)間表為6個(gè)月。除了穩(wěn)定版本,Edge版本還會(huì)按月發(fā)布。這個(gè)版本用于測(cè)試和使用最新的更新和實(shí)驗(yàn)特性。要使用最新的Edge版本,請(qǐng)?jiān)趕hell終端中運(yùn)行以下代碼:

export NXF_EDGE=1
nextflow self-update

你的第一個(gè)腳本

復(fù)制下面的示例復(fù)制并保存成名為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() }

這個(gè)腳本定義了兩個(gè)過程。第一個(gè)將字符串分割成6個(gè)字符的塊,每個(gè)塊以chunk_ 為前綴寫入一個(gè)文件,第二個(gè)接收這些文件并將其內(nèi)容轉(zhuǎn)換為大寫字母。結(jié)果字符串在 result 通道上發(fā)出,最終輸出由 view 操作符打印。
在終端中輸入以下命令來執(zhí)行腳本:

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!

可以看到,第一個(gè)進(jìn)程執(zhí)行一次,第二個(gè)進(jìn)程執(zhí)行兩次。最后打印結(jié)果字符串。
值得注意的是,進(jìn)程convertToUpper是并行執(zhí)行的,因此不能保證處理第一次分割的實(shí)例(the chunk Hello)會(huì)在處理第二次分割的實(shí)例(the chunk world!)之前執(zhí)行。
因此,完全有可能以不同的順序打印出最終結(jié)果:

WORLD!
HELLO

!Tip

十六進(jìn)制數(shù),如22/7548fa,標(biāo)識(shí)唯一的進(jìn)程執(zhí)行。這些數(shù)字也是每個(gè)進(jìn)程執(zhí)行的目錄的前綴。您可以檢查將文件更改到目錄$PWD/work所生成的文件,并使用這些數(shù)字來查找進(jìn)程的執(zhí)行路徑。

修改和恢復(fù)

Nextflow跟蹤管道中執(zhí)行的所有進(jìn)程。如果修改腳本的某些部分,則只會(huì)重新執(zhí)行實(shí)際更改的流程。未更改的進(jìn)程的執(zhí)行將被跳過,并使用緩存的結(jié)果。
這在測(cè)試或修改部分管道時(shí)很有幫助,因?yàn)椴挥脧念^開始重新執(zhí)行它。
為了完成本教程,請(qǐng)修改前面示例中的convertToUpper進(jìn)程,將進(jìn)程腳本替換為字符串rev $x,使進(jìn)程看起來如下所示

process convertToUpper {

    input:
    file x from letters

    output:
    stdout result

    """
    rev $x
    """
}

然后以相同的名稱保存文件,并通過在命令行中添加-resume選項(xiàng)來執(zhí)行它

nextflow run tutorial.nf -resume

它將打印類似的輸出結(jié)果:

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

您將看到實(shí)際上跳過了進(jìn)程splitLetters的執(zhí)行(進(jìn)程ID是相同的),并從緩存中檢索其結(jié)果。第二個(gè)進(jìn)程按預(yù)期執(zhí)行,打印反轉(zhuǎn)的字符串。

!Tip

管道結(jié)果默認(rèn)緩存在目錄$PWD/work中。根據(jù)您的腳本,這個(gè)文件夾可能會(huì)占用大量磁盤空間。如果您確定不會(huì)恢復(fù)管道執(zhí)行,請(qǐng)定期清理此文件夾。

管道參數(shù)

管道參數(shù)的聲明只需在變量名前加上前綴參數(shù),由點(diǎn)字符分隔。它們的值可以在命令行上指定,方法是在參數(shù)名稱前加上一個(gè)雙破折號(hào),即--paramName
在本教程中,您可以嘗試執(zhí)行前面的示例,指定不同的輸入字符串參數(shù),如下所示:

nextflow run tutorial.nf --str 'Bonjour le monde'

命令行上指定的字符串將覆蓋參數(shù)的默認(rèn)值。輸出是這樣的:

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版開始,參數(shù)名稱中的任何.(點(diǎn))字符被解釋為分隔符或嵌套作用域,例如--foo.bar Hello將以params.foo.bar的形式從腳本中訪問。如果你想要一個(gè)參數(shù)名包括.(點(diǎn))字符使用反斜杠字符轉(zhuǎn)義,例如--foo\.bar Hello

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容