參考鏈接
http://bioinfostar.com/2017/12/23/How-to-download-SRA-data-zh_CN/
1 NCBI-SRA和EBI-ENA數(shù)據(jù)庫
SRA數(shù)據(jù)庫: Sequence Read Archive:隸屬NCBI (National Center for Biotechnology Information)硫豆,它是一個保存高通量測序原始數(shù)據(jù)以及比對信息和元數(shù)據(jù) (metadata) 的數(shù)據(jù)庫,所有已發(fā)表的文獻中高通量測序數(shù)據(jù)基本都上傳至此研底,方便其他研究者下載及再研究占拍。其中的數(shù)據(jù)則是通過壓縮后以.sra文件格式來保存的睛榄。
ENA數(shù)據(jù)庫:European Nucleotide Archive:隸屬EBI (European Bioinformatics Institute),功能同SRA统翩,并且對數(shù)據(jù)做了注釋娇豫,界面更友好锣杂,當然對于我們來說脂倦,最誘人的當屬可直接下載fastq (.gz)文件這一項了。
2 sra文件下載方式
多數(shù)情況下元莫,我們下載sra文件是為了獲取相應的fastq或者sam文件赖阻,這樣可以和自己的pipeline對接上,直接分析踱蠢,所以
- 找地方:用手頭上的SRR (SRA Run)序列號去ENA搜索火欧,如果有棋电,就在這兒下;如果沒有苇侵,就去SRA數(shù)據(jù)庫下載
-
選方法:
首選Aspera Connect軟件赶盔,這是IBM旗下的商業(yè)高速文件傳輸軟件,與NCBI和EBI有協(xié)作合同榆浓,我們可以免費使用它下載高通量測序文件于未,體驗飛一般的感覺,速度可飚至300-500M/s陡鹃。下載完成后烘浦,本地用fastq-dump提取fastq文件,用sam-dump提取SAM文件萍鲸。
其次闷叉,如果上述方法不奏效,優(yōu)先使用sratoolkit中的prefetch命令脊阴。
最后握侧,使用sratoolkit中的fastq-dump和sam-dump命令下載,如果fastq-dump不穩(wěn)定蹬叭,推薦大家嘗試Biostar Handbook中的wonderdump腳本藕咏。
警告:盡量不要用
wget
或curl
去下載sra文件状知,某些情況下會導致下載的文件不完整
3 安裝方法
3.1 進入Aspera Connect的下載頁面秽五,選擇linux版本,復制下載地址
# 下載軟件饥悴,網速會比較慢坦喘,解壓后bash運行
wget https://download.asperasoft.com/download/sw/connect/3.10.0/ibm-aspera-connect-3.10.0.180973-linux-g2.12-64.tar.gz
tar zxvf ibm-aspera-connect-3.10.0.180973-linux-g2.12-64.tar.gz
bash ibm-aspera-connect-3.10.0.180973-linux-g2.12-64.sh
# 去根目錄查看是否有.aspera文件夾,如果看到.aspera文件夾西设,代表安裝成功
cd ~
ls -a
# 永久添加環(huán)境變量瓣铣,$需要轉義一下,否則bashrc文件會有一長串的路徑贷揽,但是不加也不影響
echo "export PATH=\$PATH:/home/caoqiansheng/.aspera/connect/bin" >> ~/.bashrc
source ~/.bashrc
# 查看幫助文檔
ascp --help
3.2 進入Aspera Connect的下載頁面棠笑,選擇linux版本,直接下載安裝文件禽绪,并將其移動至home目錄蓖救,然后解壓,bash運行
4 ascp
用法
ascp [參數(shù)] 目標文件 目標地址
在線文檔
先了解幾個
ascp
命令的常用參數(shù)
-v
verbose mode 嘮叨模式印屁,能讓你實時知道程序在干啥循捺,方便查錯。有些作者的程序缺乏人性化雄人,運行之后从橘,只見光標閃,壓根不知道運行到哪了
-T
取消加密,否則有時候數(shù)據(jù)下載不了
-i
提供私鑰文件的地址恰力,我也不知道干嘛的叉谜,反正不能少,地址一般是~/.aspera/connect/etc中的asperaweb_id_dsa.openssh文件
-l
設置最大傳輸速度踩萎,一般200m到500m正罢,如果不設置,反而速度會比較低驻民,可能有個較低的默認值
-k
斷點續(xù)傳翻具,一般設置為值1
-Q
不懂,一般加上它
-P
提供SSH port回还,一般是33001裆泳,反正我不懂
4.1 SRA數(shù)據(jù)庫下載
首先記住,數(shù)據(jù)的存放地址是ftp-private.ncbi.nlm.nih.gov
柠硕,SRA在Aspera的用戶名是anonftp
工禾,下載舉例:
如果我想下載SRR949627.sra
文件,首先我需要找到地址蝗柔,去ncbi ftp-private或者ncbi faspftp闻葵,一層層尋找,直至找到癣丧,然后記下鏈接地址槽畔,就可以開始下載了:
ascp -v -i ~/.aspera/connect/etc/asperaweb_id_dsa.openssh -k 1 -T -l200m anonftp@ftp-private.ncbi.nlm.nih.gov:/sra/sra-instant/reads/ByRun/sra/SRR/SRR949/SRR949627/SRR949627.sra ~/biostar/aspera/
* 注意:anonftp@ftp-private.ncbi.nlm.nih.gov
后面是:號,不是路徑/胁编!
* 一般來說厢钧,NCBI的sra文件前面的地址都是一樣的/sra/sra-instant/reads/ByRun/sra/SRR/...
,那么寫腳本批量下載也就不難了嬉橙!
4.2 ENA數(shù)據(jù)庫下載
這里和上面不同早直,數(shù)據(jù)的存放地址是fasp.sra.ebi.ac.uk
,ENA在Aspera的用戶名是era-fasp
市框,下載舉例:
同樣霞扬,我還是下載SRR949627
,方便的是ENA中可以直接下載fastq.gz
文件枫振,不用再從sra文件慢吞吞的轉換了喻圃,那么地址呢,可以去ENA搜索蒋得,再復制下fastq.gz文件的地址级及,或者可以去ENA的ftp地址ftp.sra.ebi.ac.uk
搜索,注意额衙,是ftp饮焦,不是fasp怕吴!記下鏈接地址,就可以下載了:
ascp -QT -l 300m -P33001 -i ~/.aspera/connect/etc/asperaweb_id_dsa.openssh era-fasp@fasp.sra.ebi.ac.uk:/vol1/fastq/SRR949/SRR949627/SRR949627_1.fastq.gz ~/biostar/aspera/
注意:era-fasp@fasp.sra.ebi.ac.uk
后面是:號县踢,不是路徑/转绷!
一般來說,EBI的sra文件前面的地址也都是一樣的vol1/fastq/...
硼啤,那么寫腳本批量下載也就不難了议经!
批量下載腳本
#!/bin/bash
# title: EMBL data download
# author: qiansheng cao
start_time=`date "+%Y-%m-%d %H:%M:%S"`
logfile=$PWD/ascp_$(date +"%Y%m%d%H%M").log
exec >$logfile 2>&1
## download,ascp必須使用絕對路徑
## 下載路徑的格式為 era-fasp@ftp.sra.ebi.ac.uk:vol1/fastq/SRR318/001/SRR3182431/SRR3182431_2.fastq.gz
## filereport_read_run_PRJNA310728_tsv.txt為EMBL數(shù)據(jù)庫下載的含每個測序數(shù)據(jù)的下載地址的文件
## 首先找到以ftp開頭的地址列谴返,然后以";"分割煞肾,檢索以_1.fastq.gz/_2.fastq.gz結尾的ftp地址,最后將ftp地址的第一個"/"替換為":"
ascp=/home/caoqiansheng/.aspera/connect/bin/ascp
cat filereport_read_run_PRJNA*_tsv.txt \
| awk '{for(i=1;i<=NF;i++) if($i~/^ftp/)print $i}' \
| awk 'BEGIN{FS=";"}{for(j=1;j<=NF;j++) if($j~/_[12].fastq.gz$/)print $j}' | sed 's#/#:#' | | while read id
do
$ascp -QT -l 300m -P33001 -i \
~/.aspera/connect/etc/asperaweb_id_dsa.openssh \
era-fasp@${id} .
done
## duration time
end_time=`date "+%Y-%m-%d %H:%M:%S"`
duration=`echo $(($(date +%s -d "${end_time}") - $(date +%s -d "${start_time}"))) \
| awk '{t=split("60 s 60 m 24 h 999 d",a);for(n=1;n<t;n+=2){if($1==0)break;s=$1%a[n]a[n+1]s;$1=int($1/a[n])}print s}'`
echo "duration time is: $duration"