NCBI提供的Entrez Direct有着自己独特的检索语法和查询理念,和sql相似但语法上差距很大。Step by Step 一步步慢慢来:
Edirect的检索原理:
1.esearch,efetch的功能和关系。这两个是edirect的核心命令。esearch从NCBI检索符合条件的记录,并将结果的summary返回client的屏幕上,并没有下载结果。efetch的参数包括-db(指定数据库)和-query(查询条件)。条件用" "标记,包括带查询的关键字和字段名两部分,如"Solenysa[ScientificName]"表示学名为Solenysa的taxa或"933038[TaxId]"TaxId为933038的taxa。查询条件可用AND,OR等逻辑运算符组合。关键字也可使用*通配符。efetch命令则执行结果的下载,参数包括-format指定结果格式,如xml等。通常的检索过程是先esearch在执行efetch,两条命令用|连接,语句如跨行使用\标记。例子:
esearch -db taxonomy -query "93308[TaxId]"|efetch -format xml #查询并下载TaxId为933038的taxa信息,结果保存为xml格式。
对于taxonomy数据库,也可食用efetch -db taxonomy -id taxid1,taxid2,... - format xml的形式直接批量检索t下载axa的结果。
2.xtract。Edirect的强大之处在于能将xml结果根据需要转换为各种形式的表格形式,方便导入DB或可视化结果。用到的命令为xtract,即从xml中依据各种tag来extract出所要的结果。xtract参数包括-pattern(xml结果集样式)-element(指定显示字段)-first(对于taxon样式这样有等级的结果样式,只显示第一次出现该字段的记录)例子
$ esearch -db taxonomy -query "933038[TaxId]"|efetch -format xml | xtract -Pattern Taxon -first TaxId ScientificName #查询并下载TaxId为933038的taxa信息,格式为xml格式,xtract只提取第一次出现的taxid,scientificname字段信息。
结果:933038 Solenysa
L2:
获得db所有可检索字段
einfo -db nucleotide |
xtract -pattern Field \
-pfx "[" -sfx "]" -element Name \
-pfx "" -sfx "" -element FullName |
sort -k 2f | expand
其中,nucleotide为db名称,常用的有pubmed,taxonomy等。结果显示出该db可供查询的所有字段。或直接在检索后输入 xtract -outline输出所有字段名。
查到可检索字段后,使用如下语句检索
esearch -db nucleotide -query "AY231025[ACCN]"|efetch -format gbc #这条语句可检索Accession Number是AY231025的DNA序列信息,输出格式为能显示序列属性的gbc格式。
$ esearch -db nucleotide -query "AY231025[ACCN]"|efetch -format fasta #输出fasta格式信息。
或采用这种方式批量获取AI或GI号的序列。
efetch -db nucleotide -id AY231025,KJ027582 -format fasta #-id 参数可以输入AI或GI的值,用,分隔
如果你有一个AI列表文件,请将值用,分隔保存为1行,并将其作为字符串传递给shell的自定义变量(语法 ai_list=`cat ai.txt`;注意用键盘上1左边的那个单引号),如ai_list. -id后面用变量名即可表示字符串。注意,列表文件的换行EOF一定要用UNIX格式的,否则efetch执行时会报错。
可以用如下代码生成序列AI号对应的TaxID,SCI_NAME值
$ efetch -db nucleotide -id $ai_list -format fasta -mode xml | xtract -pattern TSeq -element TSeq_accver TSeq_taxid TSeq_orgname
efetch -db nucleotide -id $ai_list -format fasta