免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2302 | 回复: 2
打印 上一主题 下一主题

数据的多条件过滤 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-10-27 11:42 |只看该作者 |倒序浏览
有一个文件file(空格分隔):
>NM_198493|m.1  NM_198493|g.1  type:5prime_partial  len:287  gc:universal  NM_198493:2-862(+)
>NM_198493|m.2  NM_198493|g.2  type:complete  len:153  gc:universal  NM_198493:1865-2323(+)
>NM_198493|m.3  NM_198493|g.3  type:complete  len:118  gc:universal  NM_198493:1954-2307(+)
>NM_173852|m.4  NM_173852|g.4  type:complete  len:163  gc:universal  NM_173852:27-515(+)
>NM_001135254|m.9  NM_001135254|g.9  type:complete  len:506 gc:universal  NM_001135254:599-2116(+)
>NM_001135254|m.10  NM_001135254|g.10  type:5prime_partial  len:142 gc:universal  NM_001135254:2-427(+)

如果NM编号相同的情况下选出len最大的,想要的结果如下:
>NM_198493|m.1  NM_198493|g.1  type:5prime_partial  len:287  gc:universal  NM_198493:2-862(+)
>NM_173852|m.4  NM_173852|g.4  type:complete  len:163  gc:universal  NM_173852:27-515(+)
>NM_001135254|m.9  NM_001135254|g.9  type:complete  len:506 gc:universal  NM_001135254:599-2116(+)

请问大神,该怎么弄呀???

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
2 [报告]
发表于 2016-10-27 12:15 |只看该作者
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my @aData = "";
  5. while (<DATA>){
  6.     my ($id, $leng) = /(?|>(\w+)|len:(\d+))/g;
  7.     if ($aData[0] ne $id){
  8.         print $aData[-1] if ($aData[0] ne "");
  9.         @aData = ($id, $leng, $_);
  10.         next;
  11.     }
  12.     @aData = ($id, $leng, $_) if ($aData[1] < $leng);
  13. }

  14. print $aData[-1];

  15. __DATA__
  16. >NM_198493|m.1  NM_198493|g.1  type:5prime_partial  len:287  gc:universal  NM_198493:2-862(+)
  17. >NM_198493|m.2  NM_198493|g.2  type:complete  len:153  gc:universal  NM_198493:1865-2323(+)
  18. >NM_198493|m.3  NM_198493|g.3  type:complete  len:118  gc:universal  NM_198493:1954-2307(+)
  19. >NM_173852|m.4  NM_173852|g.4  type:complete  len:163  gc:universal  NM_173852:27-515(+)
  20. >NM_001135254|m.9  NM_001135254|g.9  type:complete  len:506 gc:universal  NM_001135254:599-2116(+)
  21. >NM_001135254|m.10  NM_001135254|g.10  type:5prime_partial  len:142 gc:universal  NM_001135254:2-427(+)
复制代码

论坛徽章:
0
3 [报告]
发表于 2016-11-07 23:54 |只看该作者
  1. #!/usr/bin/perl

  2. use warnings;
  3. use strict;
  4. use List::Util qw(max);

  5. my %len_max;
  6. while (<>) {
  7.         chomp;
  8.         if (/>(\w+).*?len:(\d+)/) {
  9.                 $len_max{$1}{$2} = $_;
  10.         }
  11. }

  12. for my $name ( keys %len_max ) {
  13.         my $max = max keys %{ $len_max{$name} };
  14.         print $len_max{$name}{$max}, "\n";
  15. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP