生物信息学

批量下载JGI(phytozome植物基因组数据库)数据

2019-03-18  本文已影响39人  生信石头

写在前面

今天课题组师妹与我提到,其要下载Phytozome上的所有数据。这个事情,我在早在几年前干过。不过前年有整了一次。整体简单,以下附上之前的记录。

2017年的记录

稍微整理了流程,方便批量下载JGI基因组数据。因为一个一个点,一个一个下载,太浪费时间且不稳定。调试了下,直接开80个下载任务,批量下载JGI目前已有的所有植物基因组序列(20170405),共72个。

首先,在JGI上注册一个账号,

http://genome.jgi.doe.gov/

得到账号密码,如

账号:yourAccount
密码:youPassword

在linux上,使用curl登录并保存cookies(不知道cookies的,可以理解为登陆信息)

# 2017年的链接方式已经失效
# curl https://signon.jgi.doe.gov/signon/create --data-ascii login=yourAccount\&password=youPassword -b cookies -c cookies > /dev/null
# 目前有效的链接方式是
curl 'https://signon-old.jgi.doe.gov/signon/create' --data-urlencode 'login=yourAccount' --data-urlencode 'password=youPassword ' -c cookies > /dev/null

下载当前所有植物的数据信息列表

# 已失效,全面转成ssl
# curl http://genome.jgi.doe.gov/ext-api/downloads/get-directory?organism=PhytozomeV12 -b cookies -c cookies > all.xml
curl 'https://genome.jgi.doe.gov/portal/ext-api/downloads/get-directory?organism=PhytozomeV12' -b cookies > all.xml

整理表格,只保留所有基因组序列链接(事实上,这里可以抓取自己想要的各个文件的links,比如所有CDS,比如所有蛋白....)

perl -lne 'if(/^<folder\s+name="(\S+)"/){if($1 eq "assembly"){$flag=1}else{$flag=0}};if($flag and /^<file.*url=(\S+?)"/){print $1}' all.xml|grep -v 'softmasked'|grep -v 'hardmasked' > genome.links

接下来,开始批量下载(这里我使用的是parallel进行并行下载,事实上,一方面是考虑线程数不要80这么高,另一方面...或许你还是单线程下载就是了)

# 这个位置也调整了....
# cat genome.links |parallel -j 80 'curl http://genome.jgi.doe.gov{} -b cookies -c cookies 1> {=s/.*\/(\S+?)$/$1/=} 2> {=s/.*\/(\S+?)$/$1/=}.log'
cat genome.links |parallel -j 80 'curl  https://genome.jgi.doe.gov/portal{} -b cookies -c cookies 1> {=s/.*\/(\S+?)$/$1/=} 2> {=s/.*\/(\S+?)$/$1/=}.log'

写在最后

以上流程,事实上,基本是来自JGI的help。我针对自己的需求做了一定的修改,希望,对有需要的朋友提供一定的参考。当然,或许这个时候,你需要基于植物的双名法,获得所有物种对应的进化关系。那么,你应该考虑使用TBtools的
https://www.jianshu.com/p/a52a9d262e72

上一篇下一篇

猜你喜欢

热点阅读