24小时热门版块排行榜    

CyRhmU.jpeg
查看: 2796  |  回复: 21
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

大爷给跪了

新虫 (小有名气)

[求助] 本地化blast注释后,想从结果中的Subject Seq-id得到Nr-annotation,求大神指导。已有1人参与

如题,现在注释结果已经出来,其中Subject Seq-id(也就是比对到的nr数据库中的gi)放进一个txt文件中,如图1。
这时候,我想根据这个txt,把nr数据库(如图2)中,这些gi所代表的基因的名称一起找出来,一对一输入一个excel中。
如图2中gi|67472372|sp|P0A7T7.2|RS18_ECOLI是nr水库中的,它在txt中,想找出它后的RecName: Full=30S ribosomal protein S18 [Escherichia coli K-12](对这个基因的说明和名字)。

本地化blast注释后,想从结果中的Subject Seq-id得到Nr-annotation,求大神指导。
图1.jpg


本地化blast注释后,想从结果中的Subject Seq-id得到Nr-annotation,求大神指导。-1
图2.jpg
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

peterrjp

铁杆木虫 (著名写手)

引用回帖:
8楼: Originally posted by 大爷给跪了 at 2014-10-21 21:12:41
大神  结果不对啊
24417280         unknown
15234745         UDP-D-glucuronate 4-epimerase 1 gi
15234486         UDP-D-glucuronate 4-epimerase 5 gi
15293119         putative nucleotide sugar epimerase
21536982         nucleoti ...

那个脚本是利用|符号来分割每行数据的,对于你的文件2,脚本会取出分割后的第2(gi号)和第5个(蛋白名称)区段放进输出结果里
如果要正常运行,必须确保这个规则是适用于每一行。你多贴一些文件2的内容出来看看吧(比如那些你认为脚本运行出错了的行)。或者把两个文件发我邮箱caueducn@yeah.net

还有个很重要的规则是,你要确保文件1的gi号都是唯一的;如果gi号不是唯一,或者在文件2并不包含文件1的全部gi号,那么出来的结果就会少一些。
10楼2014-10-21 21:25:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 22 个回答

peterrjp

铁杆木虫 (著名写手)

【答案】应助回帖

感谢参与,应助指数 +1
用perl脚本很容易实现,现成的脚本我有,不过功能和参数比较多,怕你不会用,晚上给你弄个简化版

» 本帖已获得的红花(最新10朵)

2楼2014-10-21 18:05:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

大爷给跪了

新虫 (小有名气)

送红花一朵
引用回帖:
2楼: Originally posted by peterrjp at 2014-10-21 18:05:07
用perl脚本很容易实现,现成的脚本我有,不过功能和参数比较多,怕你不会用,晚上给你弄个简化版

万分感谢啊

» 本帖已获得的红花(最新10朵)

3楼2014-10-21 19:22:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

peterrjp

铁杆木虫 (著名写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
大爷给跪了: 金币+20, ★★★★★最佳答案 2014-10-21 20:05:45
代码如下,请粘贴到空白文档,保存成.pl文件
用法:假设你的第一个文件是11111111.txt(你的图1), 第二个文件是nr.txt(你的图2),双击pl脚本,产生的include.txt就是你要的结果,可以用excel打开,自动会分成两列,第一列gi编号,第二列是编码蛋白名称

#!/usr/bin/perl
my $list_file="11111111.txt"; # 输入文件1
my $tb_file="nr.txt"; # 输入文件2
my ($ll,%gi1,@f);
open INCLUDE, ">include.txt" || die "Can't open include.txt";
open TMP, $list_file || die "Can't open $list_file";
while($ll = <TMP> {
        @f=split/\|/,$ll;
        $gi1{$f[1]} = 1;
}
close(TMP);
open(TMP, $tb_file) || die;
while($ll = <TMP>{
    chomp $ll;
        @f=split/\|/,$ll;
    if ($gi1{$f[1]}){
        print INCLUDE "$f[1]\t$f[4]\n";
    }
}
close TMP;
close INCLUDE;

» 本帖已获得的红花(最新10朵)

4楼2014-10-21 19:40:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见