2013-03-26 56 views
-3

我是小白,所以我需要一些帮助。例如,我有文件中的氨基酸序列。这个sequance是在一行中。所以我需要在一行中应该有60个氨基酸。我如何使用Perl来做到这一点?如何将单行文字格式转换成多行文字?

+3

你将不得不变得更具体。什么是氨基酸的分隔符? – kjprice 2013-03-26 22:56:51

回答

1
open my $infile, '<', "/path/to/sequencefile" or die $!; 
open my $outfile, '>', "/path/to/newfile" or die $!; 

while(my $line = <$infile>) { 
    print $outfile join("\n", split(/\s/, $line)) . "\n"; 
} 

close $infile; 
close $outfile; 
1

这是一个小程序,设置结果的宽度 - 但它应该给你的想法。

#!/usr/bin/perl 
use strict; 
use warnings; 
use Bio::SeqIO; 

my $in = Bio::SeqIO->new(-file => "fasta_junk.fasta" , 
          -format => 'fasta'); 

my $out = Bio::SeqIO->new(-file => '>test.dat', 
          -format => 'fasta'); 

my $lookup = 'GTGCCAGCAGCCGC'; 
$out->width(20); 

while (my $seq = $in->next_seq()) { 
    my $pos = index $seq->seq, $lookup; 


    # if $pos != -1, ($lookup not found), 
    # or $pos != 0, (found $lookup at first position, thus 
    # no preceding characters). 
    if ($pos > 0) { 
     my $trunc = $seq->trunc(1,$pos); 
     $out->write_seq($trunc); 
    } 
} 

它产生的这种输出(带有20的宽度),

>LM1 
AAGTCTGACGGAGCAACGCC 
GCGTGTATGAAGAAGGTTTT 
CGGATCGTAAAGTACTGTCC 
GTTAGAGAAGAACAAGGATA 
AGAGTAACTGCTTGTCCCTT 
GACGGTATCTAACCAGAAAG 
CCACGGCTAACTAC 

的fasta_junk.fasta文件

>LM1 
AAGTCTGACGGAGCAACGCCGCGTGTATGAAGAAGGTTTTCGGATCGTAA 
AGTACTGTCCGTTAGAGAAGAACAAGGATAAGAGTAACTGCTTGTCCCTT 
GACGGTATCTAACCAGAAAGCCACGGCTAACTACGTGCCAGCAGCCGCGG 
TAATACGTAGGTGGCAAGCGTTGTCCGGATTTATTGGGCGTAAAGCGCGC 
GCAGGCGGTCTTTTAAGTCTGATGTGAAAGCCCCCGGCTTAACCGGGGAG 
GGTCATTGGAAACTGGAAGACTGGAGTGCAGAAGAGGAGAGTGGAATTCC 
ACGTGTAGCGGTGAAATGCGTAGATATGTGGAGGAACACCAGTGGCGAAG 
GCGACTCTCTGGTCTGTAACTGACGCTGAGGCGCGAAAGCGTGGGGAGCA 
AACAGGATTAGATACCCTGGTAGTCCACGCCGT 

你可以用各种宽度为自己玩玩看的结果。