從另一個角度解析一文檔

前幾天在網上看到了一個PERL 文本解析的問題,大概如下

-CCTTTATCTAATTTTTGGTGCATGAG-CCGGA-ATAATCGGAACAGCTT
-CCTTTATCTAATTTTTGGTGCATGAGCCGGAA-TAATCGGAACAGCT--
-CCTTTATCTAATTTTTGGTGCA-TGAGCCGGA-ATAATCGGAACAGC--
-CCTTTATCTAATTTTT-GGTGCATGAGCCGGA-ATAATCGGAACAGCT-
-CCTTTATCTAATTTTTGGTGCATGAGCCGGAA-TAATCGGAACAGCTTT
-CCTTTATCTAATTTTTGGTGCATGAGCCGGAA-TAATCGGAACAGCTTT
-CCTTTATCTAATTTTTGGTGCATGAGCCGGAA-TAATCGGAACAGCTTT
-CCTTTATCTAATTTTTGGTGCATGAGCCGGAA-TAATCGGAACAGCTT-
-CCTTTATCTAATTTTTGGTGCATGAGCCGGAA-TAATCGGAACAGCT--
-CCTTTATCTAATTTTTGGTGCATGAGCCGGAA-TAATCGGAACAGCTTT
-CCTTTATCTAATTTTTGGTGCATGAGCCGGAA-TAATCGGAACAGCTTT
這 是一個文件,每一行都等長。要求如下:

一、如果在某一列的相同位置都出現了‘-’,那麼就刪除此列。比如第一列全是“-”,那麼就刪 除這一列。返回新的數組。

二、再對新的數組操作,假如新的數組還存在有帶“-”的行,那麼就刪除這一行。輸出剩下的數組。每一行都是沒有“-”

 

一看就想到要把這個文本列轉置,如果行都是'-'就刪除這行。再把文本轉置回來,接着把行中出現'-'就把這行再刪除,剩下的行就沒有'-'。

想想這個列到行的轉置還是有點麻煩的,後最放棄,換個思路。。

其實這裏也就是要求:

一、保留行中出現最少的'-'或是沒有'-'的行。比如測試的文本行出現最少的'-'次數是兩次。如果出現多於兩次的,那其中一定有某列‘-’上不是所有都是‘-’。

二、最後去掉剩下行內的‘-’

 

 

#!/usr/bin/perl -w
use strict;
open my $file,'<',"test.txt"  ;
open(LOG,'>test_1.txt');
my $less_time=10000;
my @lines = undef;
while(my $line = <$file>){
 my @line_time = $line =~ m/-/g;
 if(@line_time < $less_time){
    $less_time = @line_time;
    @lines = undef;
    push(@lines,$line);
 }elsif(@line_time == $less_time){
    push(@lines,$line);
 }
}
foreach my $outLine(@lines){
print LOG $outLine;
}

close(LOG);
close($file);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章