2013-03-26 89 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 

你可以用各種寬度爲自己玩玩看的結果。