如何将一行文本格式转换为多行文本?

时间:2013-03-26 22:54:38

标签: perl

我是noob使用per所以我需要一些帮助。例如,我在文件中有氨基酸序列。这个序列在一条线上。所以我需要在一行中应该是60个氨基酸。我怎么能用perl做到这一点?

2 个答案:

答案 0 :(得分: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 :(得分: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

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