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

铁杆木虫 (著名写手)

引用回帖:
11楼: Originally posted by 大爷给跪了 at 2014-10-21 21:56:23
谢谢回复
我的文件1中确实有重复的数据,但是我又不想对重复项进行删除,希望pl结果也是包含重复的。因为虽然文件1相同,但是它对应的我的基因不同。
文件2就是NR数据库,整个数据库有11G左右,没法传啊。
另外 ...

按你的要求修改好了,你试试:


#!/usr/bin/perl
my $list_file="11111111.txt";
my $tb_file="nr.txt";
my ($ll,%gi1,%gi2,@f);
open INCLUDE, ">include.txt" || die "Can't open include.txt";
open TMP, $list_file || die "Can't open $list_file";
while($ll = <TMP> {
        chomp $ll;
        @f=split/\|/,$ll;
        $gi1{$f[1]}++;
        $gi2{$f[1]}=$ll;
}
close(TMP);
open(TMP, $tb_file) || die;
while($ll = <TMP>{
    chomp $ll;
        @f=split/\|/,$ll;
    while ($gi1{$f[1]}){
                print INCLUDE "$gi2{$f[1]}\t$f[4]\n";
                $gi1{$f[1]}--;
    }
}
close TMP;
close INCLUDE;
13楼2014-10-21 22:07:58
已阅   回复此楼   关注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的回帖
信息提示
请填处理意见