+ -
当前位置:首页 → 问答吧 → 如何用perl处理?

如何用perl处理?

时间:2011-01-29

来源:互联网

有一组数据,例如下:
ACACA        matches        ACACA
ACAS2L        previous symbol of        ACSS1
AD-020        alias of        TMEM167B
ADCY3      matches        ADCY3
ADCY3        previous symbol of        ADCY8
AIP        alias of        AURKAIP1
AIP        matches        AK2

在第一列如果有重复,则选择行里含有matches的项,而删除不含matches的项,如ADCY3有重复,则保留ADCY3      matches        ADCY3;AIP有重复,则保留AIP        matches        AK2
行,上例的最终处理结果应该为:

ACACA        matches        ACACA
ACAS2L        previous symbol of        ACSS1
AD-020        alias of        TMEM167B
ADCY3      matches        ADCY3
AIP        matches        AK2


请教这一程序如何编写?

附件为data。谢谢!

data.zip (14.74 KB)

下载次数:8

2011-01-29 12:07

作者: bioinfor   发布时间: 2011-01-29

回复 bioinfor
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use Data::Dumper;
  5. my %hash;
  6. open(IN,"$ARGV[0] " )||die "can't open $ARGV[0]";
  7. while (<IN>) {
  8.         chomp;
  9.         my @list=split (/\s+/,$_,2);
  10.         if (!exists $hash{$list[0]}) {
  11.                 $hash{$list[0]}=$_;
  12.         }elsif($list[1]=~/matches/){
  13.                 $hash{$list[0]}=$_;
  14.         }
  15. }
  16. close IN;

  17. print Dumper %hash;

  18. __DATA__
  19. ACACA        matches        ACACA
  20. ACAS2L        previous symbol of        ACSS1
  21. AD-020        alias of        TMEM167B
  22. ADCY3      matches        ADCY3
  23. ADCY3        previous symbol of        ADCY8
  24. AIP        alias of        AURKAIP1
  25. AIP        matches        AK2
复制代码

作者: bernana   发布时间: 2011-01-30

运行有错误啊

作者: bioinfor   发布时间: 2011-01-30