最近被要求更新一下NT数据库,然后踩了好多坑,想记录下来,避免以后再犯。
首先去官网上直接下载nt.fasta(wget -c ftp://ftp.ncbi.nlm.nih.gov/blast/db/FASTA/nt.gz),解压后发现只有Accession ID,没有gi号,这样建完的index,用blast分析是没有办法得到scientific name的,所以就想办法怎么解决这个问题。
我想要的格式:
下载下来的格式:
于是跑过去问小伙伴,他告诉我用blast软件里的update_blastdb.pl下载下来NT的index文件,再用blastdbcmd软件提取fasta文件就好了,然后就开始我的踩坑之旅,我先运行命令行:perl update_blastdb.pl nt,不久就报错:Unable to close datastream at update_blastdb.pl line 202. Failed to download nt.00.tar.gz.md5!
看了一下update_blastdb.pl的使用说明,才发现如果按照我之前的命令行下下来的还是旧的V4版的NT库,修改了参数再次尝试,虽然撑得久了点,但还是相似的报错,估计被公司IT限制了网络。代码默认从NCBI上下载,换了一个source,从Google Cloud Platform上下载:
perl update_blastdb.pl --blastdb_version 5 --decompress nt --source gcp --passive。
但是我是白天在公司下载的数据,导致其他同事上网特别慢,被IT找上门来。。。还是放弃了。
参考链接:
https://www.ncbi.nlm.nih.gov/books/NBK537770/
https://colab.research.google.com/drive/1HLFq3mC75dc5aYZCYDpTgaj_GAUASs8x#scrollTo=XnlYgZWQhCnS
看了一下update_blastdb.pl的代码,其实下载的还是ftp://ftp.ncbi.nlm.nih.gov/blast/db/nt.*.tar.gz的内容,于是晚上的时候用wget很快就下来了,我是分批次下的,例如:wget -c ftp://ftp.ncbi.nlm.nih.gov/blast/db/nt.0[0-9].tar.gz。
用blastdbcmd提序列又悲剧了,提出来的fasta的表头格式和我直接在官网上下的一样:
blastdbcmd -entry all -db nt -dbtype 'nucl' -out nt.fasta
向小伙伴求助,小伙伴说可以在NCBI网页上下载gi号,然后根据gi号用blastdb_aliastool直接提取建好的库,我试着下了一下细菌的gi号,都下了好几M了还在下载,咬咬牙,还是重新研究了一下blastdbcmd的用法,终于尝试出了我想要的格式,默认output format是%f,但是修改成 ">gi|%g|%i %t\n%s" 就能得到我想要格式:
blastdbcmd -entry all -db nt -dbtype 'nucl' -outfmt ">gi|%g|%i %t\n%s" | sed -e 's/\\n/\n/g' > nt.fasta
参考链接:http://blog.sina.com.cn/s/blog_16152d7d70102xnc3.html
总结:碰到软件要好好的看使用说明,不要急吼吼的问被人或者上网上查,网上信息不全有可能被误导,导致不必要的弯路。