免费注册 查看新帖 |

Chinaunix

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

类似key查找value的perl程序,附自己程序和数据,有点问题,谢谢! [复制链接]

论坛徽章:
3
2015亚冠之武里南联
日期:2015-07-29 12:14:352015年亚冠纪念徽章
日期:2015-08-12 14:28:272015亚冠之德黑兰石油
日期:2015-09-09 17:15:52
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-08-06 15:21 |只看该作者 |倒序浏览
本帖最后由 54red 于 2015-08-06 15:39 编辑

有两个输入一个输出  运行命令是  perl gene_change.pl data.txt find.txt 数据.rar (2.89 KB, 下载次数: 10)






明明应该是替换了15次,但是我这个总是替换不全,先谢谢大家帮我看一下。   (编的很拖沓,十分欢迎提改进意见)
还有个小问题  data.txt  两列中都有重复  所以我不会用hash
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use File::Basename;

my $gene=shift;
my $gene_new=shift;
my $out= shift;
open (IN,$gene);
open (IN1,"$gene_new");
my @haha=<IN1>;
open(OUT,">$out");
my $n=0;

foreach (@haha)
{
        chomp;
        my $gene=$_;
        my $m=1;
       while (<IN>) {
             chomp;
         my $line = $_;
         my @data = split/\t/,$line;
         if($gene eq $data[0]){
                     print OUT "$gene\t$data[1]\n";$n++;print "change\:\t$n\n";
                         $m++;last;
                                           }
           }         
              if($m==1){print OUT "$gene\tNA\n";
               

      
     }
        
}



论坛徽章:
10
2015亚冠之广州富力
日期:2015-06-16 14:44:332015亚冠之西悉尼流浪者
日期:2015-08-19 13:14:352015亚冠之阿尔希拉尔
日期:2015-08-04 09:38:052015亚冠之萨济拖拉机
日期:2015-07-31 15:01:582015亚冠之首尔
日期:2015-07-27 14:24:312015亚冠之塔什干火车头
日期:2015-07-20 09:47:202015亚冠之布里斯班狮吼
日期:2015-07-15 14:58:432015亚冠之首尔
日期:2015-07-07 09:31:262015亚冠之广州恒大
日期:2015-07-06 15:41:272015亚冠之首尔
日期:2015-08-27 11:03:01
2 [报告]
发表于 2015-08-06 16:40 |只看该作者
foreach (@haha)
{
          while (<IN>) {


这个循环结构的话,IN只能循环一次,也就是haha的第一个元素运行的那次,IN里面的会执行

论坛徽章:
3
2015亚冠之武里南联
日期:2015-07-29 12:14:352015年亚冠纪念徽章
日期:2015-08-12 14:28:272015亚冠之德黑兰石油
日期:2015-09-09 17:15:52
3 [报告]
发表于 2015-08-06 17:19 |只看该作者
好像不是,我按照那个数据做,一共替换了7次。回复 2# xiaoxingan99


   

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
4 [报告]
发表于 2015-08-06 23:49 |只看该作者
shishi:
perl abc.pl find.txt data.txt > out.txt
  1. #!/usr/bin/perl
  2. use 5.022;

  3. open my $FIND, shift;
  4. open my $DATA, shift;
  5. my %data = map split, <$DATA>;

  6. while (<$FIND>) {
  7.     chomp;
  8.     say $_ , "\t", $data{$_} || 'NA';
  9. }
复制代码

评分

参与人数 1信誉积分 +10 收起 理由
54red + 10 真简单!

查看全部评分

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
5 [报告]
发表于 2015-08-07 00:20 |只看该作者
回复 3# 54red

xiaoxingan99: shi duide
这个循环结构的话,IN只能循环一次,也就是haha的第一个元素运行的那次

   

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
6 [报告]
发表于 2015-08-07 09:10 |只看该作者
回复 5# rubyish


    那 while 循环里面还有个 last 呢。

论坛徽章:
3
2015亚冠之武里南联
日期:2015-07-29 12:14:352015年亚冠纪念徽章
日期:2015-08-12 14:28:272015亚冠之德黑兰石油
日期:2015-09-09 17:15:52
7 [报告]
发表于 2015-08-07 17:50 |只看该作者
多谢,代码很好用,看了你的再看我的真的是没法看,继续学!回复 5# rubyish


   

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
8 [报告]
发表于 2015-08-07 23:17 |只看该作者
回复 6# MMMIX


A! mei kandao nage last
3 Q ~

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
9 [报告]
发表于 2015-08-07 23:46 |只看该作者
回复 7# 54red

Yong zhege  perltidy paiban nide ugly code ~
http://search.cpan.org/~shancock/Perl-Tidy-20140711/bin/perltidy
   

论坛徽章:
3
2015亚冠之武里南联
日期:2015-07-29 12:14:352015年亚冠纪念徽章
日期:2015-08-12 14:28:272015亚冠之德黑兰石油
日期:2015-09-09 17:15:52
10 [报告]
发表于 2015-08-08 12:43 |只看该作者
哈哈,谢谢,推荐一个这么好的整理工具,有空看看怎么用的!回复 9# rubyish


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP