如何分割块文件并计算中间行

时间:2013-08-23 14:47:02

标签: perl

我有一个这样的文件:

fixedStep chrom=chr22 start=14430001 step=1
144300010.000
0.002
0.030
0.990
0.000
0.000
0.000
fixedStep chrom=chr22 start=14430001 step=1
0.000
0.000
0.000

我想从fixedStep开始的每一行开始,并在每一行中加一个计数器。 例如

fixedStep chrom=chr22 start=14430001 step=1
14430001   0.000
14430002   0.002
14430003   0.030
fixedStep chrom=chr22 start=16730005 step=1
16730005   0.990
16730006   0.000
.........

我写了这段代码,但没有用。

open my $scores_info, $scores_file or die "Could not open $scores_file: $!";
while( my $sline = <$scores_info>)  {

    if ($sline=~ m/fixedStep/) {
        my @data = split(' ', $sline);
        my @begin = split('=', $data[2]);
        my $start = $begin[1];
        print "$start\n";
        my $nextline = <$scores_info>;
        $start++;
        print $start . "\t" .  $nextline;
    }

最后将其打印在新文件中。 请问你能帮帮我吗?? 提前谢谢

1 个答案:

答案 0 :(得分:3)

如果遇到“fixedStep”行,请设置$count并打印该行。否则,打印并增加$count

my $count = 0;
while( my $sline = <$scores_info>)  {

    if ($sline=~ m/fixedStep/) {
        my @data = split(' ', $sline);
        my @begin = split('=', $data[2]);
        $count = $begin[1];
        print $sline;
    } else {
        print $count++ . "\t" . $sline;
    }
}

输出:

fixedStep chrom=chr22 start=14430001 step=1
14430001    144300010.000
14430002    0.002
14430003    0.030
14430004    0.990
14430005    0.000
14430006    0.000
14430007    0.000
fixedStep chrom=chr22 start=16730005 step=1
16730005    0.990
16730006    0.000
16730007    0.000