从NCBI批量下载指定参考序列

不想学习了,过来写个post。

网页方法

进入下面这个网站,按指示操作。
http://www.ncbi.nlm.nih.gov/sites/batchentrez?

  • 输入AC/GI号,保存为文本文件。
    • 在mac里面可能比较方便的方法是:Textedit ctrl+command+t。但是我好像不怎么用得到,直接终端vi更香的亚子。
  • 选择对应数据库,这里是Nucleotide,传入上面的带有序列号的文本文件,点击Retrieve返回搜索序列记录。
  • 点击Retrieve records for xxx UID(s)
  • Send to - file -fasta

命令行版本

使用NCBI Entrez Direct UNIX E-utilities.
下载安装文件: https://www.ncbi.nlm.nih.gov/books/NBK179288/bin/install-edirect.sh
进行安装

1
source ./install-edirect.sh

它会把一些目录写到.bashrc里面,因此需要

1
source ~/.bashrc

下载序列,例如

1
esearch -db nucleotide -query "NC_030850.1" | efetch -format fasta > NC_030850.1.fasta

即可下载fasta序列。

如果有多个序列要下载,可以写一个小bash脚本。
例如原始的序列号可能由于一些原因是有重复的,可以将其进行一个重的去,举个例子

1
cat xx.csv |cut -d, -f1 |uniq > ./index.txt

然后写个download.sh:用一个循环就可以遍历序列号下载了

1
2
3
4
5
6
for line in {1..26075} 
do
echo $line
seqname=`sed -n ${line}p ./index.txt`
esearch -db nucleotide -query ${seqname} | efetch -format fasta > ${seqname}.fasta
done

批量下载,顾名思义,量有点多,必然要把脚本放到后台运行,然后我就可以出去玩了!

1
nohup bash download.sh &

花絮

在使用esearch的时候,可能会遇到下面这个警告。

1
2
3
4
5
6
7
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_CTYPE = "UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.

主要原因是LC_ALL没有设置

LC_ALL变量设置命令’locale -a’输出的所有区域变量。它是一种方便的使用一个变量指定语言环境的方法,而不必指定每个LC_*变量。在该环境中启动的进程将在指定的区域设置中运行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LC_CTYPE=UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

解决办法是将export LC_ALL="en_US.UTF-8”加到~/.bashrc最后一行。

然后可以看一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

就不会再出现上述的警告了。

记得写过aspera下载NCBI数据,目的略有不同,各取所需,撤。