免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3873 | 回复: 6
打印 上一主题 下一主题

求帮忙,写的脚本不知错在哪里 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-08-03 15:54 |只看该作者 |倒序浏览
本帖最后由 cxrfly 于 2014-08-03 17:58 编辑

1、

我有一个文件a,包括91个蛋白序列ID;另外一个b包括2万多蛋白序列。

File a:
jgi|Physo3|320426|gm1.1_g
jgi|Physo3|551829|estExt_Genewise1Plus.C_1_t10001


File b:
>jgi|Physo3|320426|gm1.1_g
MAILAYVNFKREGLVSSYASDPVLALGAMKVCAGSGEVGEMVARILLLLAMDKCVMGDKDFSQCYHTIGQ
FVPVQQFLDVLQGNKERPIYRKKMDSEITKGPEFKVRRSKWEGWYVGFTHFVQLHLEPNEDTLWFLLGRR
AAGIFPRNQSGADLLIPMFKKRSNSRPVGGETTRGEQEGHEVLMMLIQNQLSFTGVHDTIRIYMTARGQE
ADGNCIYTTTMKDSLQKSPHQRGEATAKEDGMEAVGGNTVGASEMRAESLAKNETNPGVTIISEETQEGK
EKEPRRILVPERSMLANMVKSQYDPLGLVVDDRGDDEKQSVSSYAKLSVTANSAKLLKSARKALACAPGC
SSKNFGVNAVDDGSKGTSHCHNKGGDTIKRPREKKLEQSQGRKRAKCER*
>jgi|Physo3|551829|estExt_Genewise1Plus.C_1_t10001
MTTPARSPLSAPSSLLRRVASPVPAGPGSGGGARSQTLLSRLFRRKDRSPAAPRPLSRSLYGEEEETKTH
VDSPMRALLRSLSLQRKSRPQEVRTPPADAAQVLLEGVLTELAQTRYWRSKPCYFFTFTLRQFHFLPETR
RPGRLVAIATLSPDDVVSDLRTHRQVKHALELQLAAAHQRVEIAGARDADDDTREESASQLLRLAATDER
TLVKWLQMLNSCISRLVLQAEERQYRHGDAAGWNPVTEPAAKIVPMFGDEGRRSSMLVMTRDRDHNLSAI
SFTSSECSNNNHYEEDIPAEEIRAARKDAVGEEDEDETKPPADERYDRVTPALEDEELPARRAIEYCCTP
EYRSSGSGSSNSQNLVDTDNNNAADEKEGNNQEDNQGDDDSEEDSLAGDLATQSSVAPYKSAVLAGRGVA
AYQSVGLEDEYTKAGSRSAVANGRGRLPRAAFGATTSSSGLFPTLRPQTHSFNANGQVFTLDTRYQLVKP
IGNGAYGAVIAVKDVVNGGENLAVKKITNIFEDLVDAKRILREVRLLGHFNHKNITRLLDLSPPPSRKQF
DDMYIITELMETDLHQVIYSMQPMSDDHVKYFLYQMLCALHHIHSAGVLHRDMKPSNILLNANCDLKVCD
FGLARGGVGGQEELLQPGELTEYVVTRWYRAPEIMLNCLHYTTAIDVWAVGCIFAEMLLREPLFPGNDYL
HQLKLIIKFLGTPKQEDIGFVKNTKAMRFLTKLAISKPKKWRDVFAGSGTENAVSSEAIDLLSKMLFFNP
EKRISVDAALRHPYLATFFDENDLVVSTAFDFSFDLPDDQLSKDALINLLCEDIEQFHPPVPTSVTPMPL
SAAASRFFRMGMTASAS*


2、

我想利用91个ID,从另外的文件中抽取这些ID对应的氨基酸序列。
脚本是这样写的,不对,没有结果文件产生。烦您指点下!


#!/usr/bin/perl -w
use strict;
use warnings;

#welcome words
print "\n######Dear,";

print " Welcome you to use this code!\n";

print " Please give me your feedback after using.######\n\n\n";



my $proteinfile='file b';
unless (open(PROTEINFILE, $proteinfile)){
print "Could not open the file $proteinfile!\n";
}
#reset line seperator '$/' to '>' read in each set of genes one by one
$/= ">";

while (<PROTEINFILE>){
my $protein_ID='';
my $protein_sequence='';

if ($_=~/^>/){
next;}

if ($_=~/(.*\n)/){
$protein_ID=$1;
}
$_=~s/^[^\n]+\n//;

$protein_sequence=$_;
$protein_sequence=~s/>$//;


my $inputfile="file a";
my @ID_file=get_file ($inputfile);

my $ID='';

foreach $ID (@ID_file){
chomp $ID;
if ($protein_ID eq $ID){
my $data=">$protein_sequence\n";

my $outputfile = 'test.output';
open (OUTPUT,">>$outputfile");

print OUTPUT  "$data\n";

close OUTPUT;

   }
else {
exit;
       }

                              }
}
close PROTEINFILE;
exit;

#####################################################

#read in data from one file you input
sub get_file {
my ($filename)=@_;
unless (open (GET_FILE_DATA,$filename)){
print STDERR "Cann\'t open \"$filename\"\n";
exit;
}
my @filedata = ();
@filedata=<GET_FILE_DATA>;
close GET_FILE_DATA;
return @filedata;
}

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
2 [报告]
发表于 2014-08-03 18:42 |只看该作者
不考虑顺序且文件a ID唯一的话:


否则:

http://bbs.chinaunix.net/forum.p ... mp;fromuid=29097174

论坛徽章:
3
天蝎座
日期:2013-12-10 19:37:11酉鸡
日期:2014-08-04 20:05:38双鱼座
日期:2014-08-09 21:53:54
3 [报告]
发表于 2014-08-03 18:56 |只看该作者
回复 1# cxrfly


    已在原shell版给你回复了,这儿就不再复制一遍了。

论坛徽章:
0
4 [报告]
发表于 2014-08-07 15:48 |只看该作者
回复 2# huang6894


    您写的好简洁,好多我还没有学,呵呵,需要消化下。

论坛徽章:
0
5 [报告]
发表于 2014-08-07 15:50 |只看该作者
回复 3# 欧阳西风


    谢谢你的提醒。我现在发现确实是我由于修改了行符,导致ID文件读入后不对。
我已经修改了,程序正常运行了,谢谢你。

论坛徽章:
0
6 [报告]
发表于 2014-08-07 15:54 |只看该作者
谢谢huang6894和欧阳西风两位的帮忙。我努力看了点书,自己把我之前写的修改了下,现在可以准确运行了,也得到了希望的结果。可能我的程序不是最简洁最好的,但是毕竟它可以运行了。
贴出来,希望有同样困惑的人可以借鉴下,也请指导我如何提高代码写作水平。

#!/usr/bin/perl -w
use strict;
use warnings;

#welcome words
print "\n######Dear, ";

print " Welcome you to use this code!\n";

print " Please give me your feedback after using.######\n\n\n";

my $inputfile="file a";

unless (open (GET_ID,$inputfile)){
print STDERR "Cann\'t open \"$inputfile\"\n";
exit;
}

my @id1 = ();
my @id2 = ();

@id1=<GET_ID>;
foreach my $fileid (@id1){
$fileid=~ s/^\s*|\s*$//g;
push @id2, $fileid;
}
close GET_ID;


my $proteinfile="file b";
unless (open(GET_PROTEIN, $proteinfile)){
print "Could not open the file $proteinfile!\n";
}


#reset line seperator '$/' to '>' read in each set of genes one by one
$/= ">";

while (<GET_PROTEIN>){
my $protein_ID='';
my $protein_sequence='';

if ($_=~/^>/){
next;}

if ($_=~/(.*)\n/){
$protein_ID=$1;
}

$_=~s/^[^\n]+\n//;
$protein_sequence=$_;
$protein_sequence=~s/>$//;
$protein_sequence=~ s/\s*//g;

foreach my $ID (@id2){

if ($ID eq $protein_ID){
my $data=">$protein_ID\n$protein_sequence\n";

my $outputfile = 'test.output';
open (OUTPUT,">>$outputfile");

print OUTPUT  "$data\n";

close OUTPUT;
print "$ID\n";
   }
}
}

close GET_PROTEIN;
exit;

论坛徽章:
0
7 [报告]
发表于 2014-08-08 14:14 |只看该作者
什么叫蛋白序列id,什么是氨基酸序列呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP