从另一个角度解析一文档

前几天在网上看到了一个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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值