免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: little_joe
打印 上一主题 下一主题

文件匹配相同ID根据比较结果输出ID和匹配项——求大神赐教... [复制链接]

论坛徽章:
0
11 [报告]
发表于 2016-05-19 19:50 |只看该作者
感谢感谢! 回复 6# jason680


   

论坛徽章:
0
12 [报告]
发表于 2016-05-19 19:52 |只看该作者
恩恩,数据的问题, 感谢感谢!回复 7# RE_HASH


   

论坛徽章:
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
13 [报告]
发表于 2016-05-22 09:58 |只看该作者
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my (%hStat, $sID);
  5. while (<>){
  6.     my @aCols = split;
  7.     local $_ = $aCols[0];
  8.     if (m/\A>/ and not defined $aCols[1]){
  9.         $sID = $_;
  10.         next;
  11.     }
  12.     if (!defined $aCols[1]){
  13.         push (@{$hStat{$sID}}, $_);
  14.         next;
  15.     }
  16.     next if (!/\A>/);
  17.     if (exists $hStat{$_}){
  18.         my $sPrint = 1;
  19.         foreach my $sV (grep {$_ >= $aCols[1] and $_ <= $aCols[-1]} @{$hStat{$_}}){
  20.             print "$sID\n" if ($sPrint++ == 1);
  21.             print "$sV\n";
  22.         }
  23.     }
  24. }
复制代码

论坛徽章:
0
14 [报告]
发表于 2016-05-24 11:27 |只看该作者
谢谢您的帮助,我试了一下发现输出结果不太匹配,例如文件输出为 但是事实上文件搜索并没有 匹配到的数字,请问这个是怎么回事呢,还望大神能够给解答一下,感谢感谢!文件如下,期待大神回信》》》 文件.zip (17.31 KB, 下载次数: 13) 回复 13# sunzhiguolu


   

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
15 [报告]
发表于 2016-05-24 13:12 |只看该作者
现在怎么了,大神,跪拜这些词泛滥,难道为了获取帮助,连节操都失去了吗?大家都是从获取别人无私的帮助中过来的,不必如此。

论坛徽章:
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
16 [报告]
发表于 2016-05-24 14:04 |只看该作者
本帖最后由 sunzhiguolu 于 2016-05-24 14:11 编辑

回复 14# little_joe
再试下,
perl ba.pl b.txt a.txt
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my ($sID, %hStat, $sPrint);
  5. while (<>){
  6.     my @aCols = split;
  7.     if (@ARGV){
  8.         next if (/\A\s+/);
  9.         next if (exists $hStat{$aCols[0]});
  10.         $hStat{$aCols[0]} = {'Min' => $aCols[1], 'Max' => $aCols[-1]};
  11.         next;
  12.     }

  13.     if (/\A(>\S+)/){
  14.         if (!exists $hStat{$1}){
  15.             $sPrint = 0;
  16.             next;
  17.         }
  18.         ($sPrint, $sID) = (1, $1);
  19.         next;
  20.     }
  21.     if ($sPrint and $aCols[0] >= $hStat{$sID}{'Min'} && $aCols[0] <= $hStat{$sID}{'Max'}){
  22.         print $sID, "\n" if ($sPrint++ == 1);
  23.         print;
  24.     }
  25. }
复制代码
>NP_414681.1
683
690
691
692
694
>NP_414854.1
395
407

   

论坛徽章:
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
17 [报告]
发表于 2016-05-24 14:40 |只看该作者
本帖最后由 sunzhiguolu 于 2016-05-24 14:40 编辑

回复 14# little_joe
13 楼的帖子, 代码的确有问题, 感谢提醒, 谢谢... (把有问题的部分已经修改了)
perl ab.pl a.txt b.txt
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my ($sID, %hStat);
  5. while (<>){
  6.     my @aCols = split;
  7.     if (/\A>/ and !defined ($aCols[1])){
  8.         $sID = $aCols[0];
  9.         next;
  10.     }
  11.     if (!defined $aCols[1]){
  12.         push (@{$hStat{$sID}}, $_);
  13.         next;
  14.     }

  15.     next if (!/\A>/);
  16.     my $sPrint = 0;
  17.     if (exists $hStat{$aCols[0]}){
  18.         foreach (grep {$_ >= $aCols[1] and $_ <= $aCols[-1]} @{$hStat{$aCols[0]}}){
  19.             print $aCols[0], "\n" if (!$sPrint++);
  20.             print;
  21.         }
  22.     }
  23. }
复制代码
>NP_414681.1
683
690
691
692
694
>NP_414854.1
395
407

论坛徽章:
0
18 [报告]
发表于 2016-05-24 16:04 |只看该作者
这次结果对的,谢谢O(∩_∩)O谢谢回复 17# sunzhiguolu


   

论坛徽章:
0
19 [报告]
发表于 2016-05-24 16:09 |只看该作者
谢谢提醒,再次感谢各位的帮助和提醒回复 15# 104359176


   

论坛徽章:
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
20 [报告]
发表于 2016-05-25 17:10 |只看该作者
回复 6# jason680
通过这个问题, 终于找到问题所在了, 非常感谢大神指点...

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP