Palmsonntagmorgen

NGSデータを使った解析と、その周辺。

aria2を使ってENAから高速にfastq.gzを取得する

1論文あたりで用いられるデータが年々増加しており、論文の再実験をするためにFASTQをダウンロードするのもなかなか苦労しますよね。 以下の記事でENAからwgetを使ってfastqを取得する方法を紹介していますが、

rnakato.hatenablog.jp

今回はその高速版です。

ENAから fastqファイルを取得する

ここでは例として、Ahn et al., Nature, 2021の論文RNA-seqデータ(paired-end)を使います。IDはPRJNA604380です。

ENA上で PRJNA604380を検索すると、以下のようなページになります。RNA-seqデータが18サンプル含まれています。

右側にある "Download All" をクリックすればダウンロードが開始されますが、めちゃくちゃ遅いです。しばしば途中でタイムアウトになり、うまくダウンロードされません。 FASTQのリンクをクリックすれば個別にダウンロードできますが、それでも遅いですし、サンプル数が多いと大変です。

ENAから wget を使ってfastqファイルを一括取得する

FTPリンクをファイルに保存し、wget -i を使う方法をおさらいします。

画面上部 "Download report"の TSV をクリックすると、各サンプルの詳細をテキスト形式でダウンロードできます。ここでは "filereport_read_run_PRJNA604380_tsv.txt" という名前で保存されました。

 $ head -n3 filereport_read_run_PRJNA604380_tsv.txt
study_accession sample_accession        experiment_accession    run_accession   tax_id  scientific_name fastq_ftp       submitted_ftp   sra_ftbam_ftp
PRJNA604380     SAMN13967826    SRX7659655      SRR10998571     9606    Homo sapiens    ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/071/SRR10998571/SRR10998571_1.fastq.gz;ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/071/SRR10998571/SRR10998571_2.fastq.gz          ftp.sra.ebi.ac.uk/vol1/srr/SRR109/071/SRR10998571
PRJNA604380     SAMN13967825    SRX7659656      SRR10998572     9606    Homo sapiens    ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/072/SRR10998572/SRR10998572_1.fastq.gz;ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/072/SRR10998572/SRR10998572_2.fastq.gz          ftp.sra.ebi.ac.uk/vol1/srr/SRR109/072/SRR10998572

ごちゃごちゃしていますが、サンプルの各種IDや生物種、FTPのURLなどが記載されています。 FTPのURLは7列目に記載されています。

 $ cut -f7 filereport_read_run_PRJNA604380_tsv.txt
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/071/SRR10998571/SRR10998571_1.fastq.gz;ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/071/SRR10998571/SRR10998571_2.fastq.gz
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/072/SRR10998572/SRR10998572_1.fastq.gz;ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/072/SRR10998572/SRR10998572_2.fastq.gz
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/073/SRR10998573/SRR10998573_1.fastq.gz;ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/073/SRR10998573/SRR10998573_2.fastq.gz
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/074/SRR10998574/SRR10998574_1.fastq.gz;ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/074/SRR10998574/SRR10998574_2.fastq.gz
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/075/SRR10998575/SRR10998575_1.fastq.gz;ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/075/SRR10998575/SRR10998575_2.fastq.gz
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/078/SRR10998578/SRR10998578_1.fastq.gz;ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/078/SRR10998578/SRR10998578_2.fastq.gz
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/081/SRR10998581/SRR10998581.fastq.gz
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/079/SRR10998579/SRR10998579_1.fastq.gz;ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/079/SRR10998579/SRR10998579_2.fastq.gz
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/082/SRR10998582/SRR10998582.fastq.gz
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/083/SRR10998583/SRR10998583.fastq.gz
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/084/SRR10998584/SRR10998584.fastq.gz
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/087/SRR10998587/SRR10998587.fastq.gz
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/086/SRR10998586/SRR10998586.fastq.gz
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/088/SRR10998588/SRR10998588.fastq.gz
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/076/SRR10998576/SRR10998576_1.fastq.gz;ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/076/SRR10998576/SRR10998576_2.fastq.gz
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/077/SRR10998577/SRR10998577_1.fastq.gz;ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/077/SRR10998577/SRR10998577_2.fastq.gz
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/080/SRR10998580/SRR10998580_1.fastq.gz;ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/080/SRR10998580/SRR10998580_2.fastq.gz
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/085/SRR10998585/SRR10998585.fastq.gz

paired-end のファイルがセミコロン(;) 区切りで記載されているので、セミコロンを改行に変換してファイル保存します。

 $ cut -f7 filereport_read_run_PRJNA604380_tsv.txt | sed 's/;/\n/g' | grep -v fastq_ftp > ftp.txt
 $ cat ftp.txt
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/071/SRR10998571/SRR10998571_1.fastq.gz
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/071/SRR10998571/SRR10998571_2.fastq.gz
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/072/SRR10998572/SRR10998572_1.fastq.gz
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/072/SRR10998572/SRR10998572_2.fastq.gz
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/073/SRR10998573/SRR10998573_1.fastq.gz
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/073/SRR10998573/SRR10998573_2.fastq.gz
(中略)
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/080/SRR10998580/SRR10998580_1.fastq.gz
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/080/SRR10998580/SRR10998580_2.fastq.gz
ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/085/SRR10998585/SRR10998585.fastq.gz

あとはこのファイルにwget -i を実行すれば順番にダウンロードされます。

 $ wget -i ftp.txt

aria2を使ってfastqファイルを一括取得する

wgetはやはり低速であり、ダウンロードに時間がかかるという点では改善されません。 ここではwgetよりも高速にダウンロードできるaria2を使ってみましょう。

curlやwgetの数倍速い 爆速ダウンローダー aria2を使う #Linux - Qiita

aria2がインストールされていない場合はインストールします。aptでもbrewでも入ります。

 $ sudo apt install aria2

ひとつファイルをダウンロードしてみましょう。コマンド名はaria2c です。元のFTP URLは受け付けないようですので、冒頭に "ftp://" を追加して実行してください。

 $ aria2c -x 16 ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR109/085/SRR10998585/SRR10998585.fastq.gz

-x 16 は使用するCPU数です。最大で16まで指定できます。 これにより、wgetよりも圧倒的に高速にファイルをダウンロードすることが可能です。

全ファイルをダウンロードしてみましょう。aria2cも "-i" オプションが使えますが、ここでは "ftp://"を追加しなければいけません。色々なやり方がありますが、ここではシンプルにfor文を使いましょう。

for url in $(cat ftp.txt); do
    echo $url
    aria2c -x 16 ftp://$url
done

これで全ファイルをダウンロードできます。

終わりに

  • この方法をGEOやSRAで使えると楽なのですが、これらのデータベースではダウンロードURLが公開されていません。ariawgetを使いたい場合はENAを使いましょう。
  • また、aria2cも時々ダウンロードに失敗することがあるようです。ダウンロード完了後には全てのファイルが揃っているか確認するようにしてください。