免费注册 查看新帖 |

Chinaunix

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

我写的代码最后的输出结果有问题,不知道出在哪里,求大神帮忙指教一下,帮我改一下, [复制链接]

论坛徽章:
1
狮子座
日期:2014-02-25 09:46:33
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-11-21 09:55 |只看该作者 |倒序浏览
infile:
HWI-ST1106:755:H0V1MADXX:2:2204:4345:52798      99      Cluster_1   
HWI-ST1106:755:H0V1MADXX:2:2214:2460:68727      65      Cluster_1      
HWI-ST1106:755:H0V1MADXX:2:1205:4057:41509      153     Cluster_1   
HWI-ST1106:755:H0V1MADXX:2:2214:5236:82377      153     Cluster_1   
HWI-ST1106:755:H0V1MADXX:2:1202:16871:54180     89      Cluster_1   
HWI-ST1106:755:H0V1MADXX:2:1212:4117:41420      153     Cluster_1      
HWI-ST1106:755:H0V1MADXX:2:2204:4345:52798      147     Cluster_1     
HWI-ST1106:755:H0V1MADXX:2:2115:10141:17608     89      Cluster_10   
HWI-ST1106:755:H0V1MADXX:2:1212:17055:53562     163     Cluster_10   
HWI-ST1106:755:H0V1MADXX:2:2110:14814:19836     163     Cluster_10
HWI-ST1106:755:H0V1MADXX:2:2206:18216:74573     99      Cluster_10
HWI-ST1106:755:H0V1MADXX:2:2113:17626:93067     163     Cluster_10   
HWI-ST1106:755:H0V1MADXX:2:1207:3103:73263      99      Cluster_10   
HWI-ST1106:755:H0V1MADXX:2:1103:7010:88764      163     Cluster_10     
HWI-ST1106:755:H0V1MADXX:2:2111:3039:51639      99      Cluster_10   
HWI-ST1106:755:H0V1MADXX:2:1212:17055:53562     83      Cluster_10     
HWI-ST1106:755:H0V1MADXX:2:1107:5037:38527      163     Cluster_100  
HWI-ST1106:755:H0V1MADXX:2:1111:6627:73408      393     Cluster_100   
HWI-ST1106:755:H0V1MADXX:2:1215:16841:58015     73      Cluster_100  
HWI-ST1106:755:H0V1MADXX:2:1107:5037:38527      83      Cluster_100  
HWI-ST1106:755:H0V1MADXX:2:2203:2962:64393      393     Cluster_100  
HWI-ST1106:755:H0V1MADXX:2:1113:7244:73782      137     Cluster_100   
HWI-ST1106:755:H0V1MADXX:2:1104:14953:2121      163     Cluster_1000  
HWI-ST1106:755:H0V1MADXX:2:1212:12709:69650     153     Cluster_1000  
HWI-ST1106:755:H0V1MADXX:2:1108:11227:4178      99      Cluster_1000  
HWI-ST1106:755:H0V1MADXX:2:2112:18155:78922     99      Cluster_1000  
HWI-ST1106:755:H0V1MADXX:2:1203:2053:36493      99      Cluster_1000   
HWI-ST1106:755:H0V1MADXX:2:1112:20266:62035     163     Cluster_1000   
HWI-ST1106:755:H0V1MADXX:2:2104:3375:35332      89      Cluster_1000   
HWI-ST1106:755:H0V1MADXX:2:1105:17103:16844     153     Cluster_1000   
HWI-ST1106:755:H0V1MADXX:2:1215:2568:63103      89      Cluster_1000   
HWI-ST1106:755:H0V1MADXX:2:2205:3921:94905      129     Cluster_1000   
HWI-ST1106:755:H0V1MADXX:2:2107:17892:33129     89      Cluster_1000
HWI-ST1106:755:H0V1MADXX:2:2112:18155:78922     147     Cluster_1000       -
HWI-ST1106:755:H0V1MADXX:2:1104:14953:2121      83      Cluster_1000   
HWI-ST1106:755:H0V1MADXX:2:1108:11227:4178      147     Cluster_1000   
HWI-ST1106:755:H0V1MADXX:2:1112:20266:62035     83      Cluster_1000   
HWI-ST1106:755:H0V1MADXX:2:1203:2053:36493      147     Cluster_1000  
下面是我写的代码:
1 #!/usr/bin/perl
  2 use strict;
  3 use warnings;
  4 open IN,"hitsok.sam"or die"Can not open IN\n";
  5 open OUT,">oka.xls"or die"Can not open OUT\n";
  6 my (%hash,%chek,%pare);
  7 while(<IN>){
  8         chomp;
  9         my @line=split/\t/,$_;
10         if(exists $hash{$line[2]}){
11            $hash{$line[2]}++;
12            if(exists $chek{$line[0]}){
13               $pare{$line[2]}++;
14            }else{
15               $chek{$line[0]}=1;
16            }
17         }else{
18            $hash{$line[2]}=1;
19         }
20 }
21 foreach my $key (sort {$hash{$b}<=>$hash{$a}} keys %hash){
22         print OUT "$key\t$hash{$key}\t";
23         if(exists $pare{$key}){
24            print OUT "$pare{$key}\n";
25         }else{
26            print OUT "0\n";
27         }
28 }
29 close IN;
30 close OUT;  
正确的输出结果应该是这样的:
Cluster_1000    16      4
Cluster_10      9       1
Cluster_1       7       1
Cluster_100     6       1
但是我写的代码的输出结果是这样的:
Cluster_1000    16      4
Cluster_10      9       1
Cluster_1       7       0
Cluster_100     6       0
求各位大神、各位高手帮忙找一下错误,万分感谢!!!

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
2 [报告]
发表于 2013-11-21 10:15 |只看该作者
lz 应该去学会如何提问{:2_179:}

一个简单的例子说明如何提问

http://bbs.chinaunix.net/thread-4111100-1-2.html

论坛徽章:
1
狮子座
日期:2014-02-25 09:46:33
3 [报告]
发表于 2013-11-21 10:35 |只看该作者
好吧,我现在严重怀疑自己的表达能力了,你哪里不明白,我单独说那个地方?
回复 2# pitonas


   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
4 [报告]
发表于 2013-11-21 10:39 |只看该作者
回复 1# 旋转小马

Add some code for debug, and didn't find  Cluster_1 and Cluster_100

          if(exists $chek{$line[0]}){
              $pare{$line[2]}++;
              print "\$pare{\$line[2]}=$pare{$line[2]}, \$line[2]=$line[2]\n";
          }else{


$pare{$line[2]}=1, $line[2]=Cluster_10
$pare{$line[2]}=1, $line[2]=Cluster_1000
$pare{$line[2]}=2, $line[2]=Cluster_1000
$pare{$line[2]}=3, $line[2]=Cluster_1000
$pare{$line[2]}=4, $line[2]=Cluster_1000
   

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
5 [报告]
发表于 2013-11-21 10:51 |只看该作者
如何得到输出结果:
Cluster_1000    16      4
Cluster_10      9       1
Cluster_1       7       1
Cluster_100     6       1

论坛徽章:
1
狮子座
日期:2014-02-25 09:46:33
6 [报告]
发表于 2013-11-21 10:59 |只看该作者
回复 4# jason680
你说的虽然不是全明白,但也明白了一点点,但是怎样修改才能得到我想要的结果呢???

   

论坛徽章:
1
狮子座
日期:2014-02-25 09:46:33
7 [报告]
发表于 2013-11-21 11:01 |只看该作者
回复 5# pitonas
问题就在这嘛,我写的代码就是想要得到这个结果,但是为什么程序输出的结果不对,现在就是不知道原因在哪啊?

   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
8 [报告]
发表于 2013-11-21 11:03 |只看该作者
回复 6# 旋转小马


would you help us to help you?

you didn't describe how to get result and I don't know how to modify.

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
9 [报告]
发表于 2013-11-21 11:20 |只看该作者
回复 7# 旋转小马

你至少得告诉我们, 你的这个结果是怎么来的吧? 靠大家来猜, 好象对解决问题没什么帮助.

简单的说吧, 你的 正确 输出中, 第一字段, 我可以理解, 就是输入的最后一个字段, 第二个字段, 我猜是 输入最后一个字段的计数, 但你输出的第三个字段, 我实在猜不出来了, 也没看出跟输入有半毛钱关系. 那么, 你让我们怎么帮你呢?

生成这样的输出很容易的, 一条 print就行了.  

  1. print qq(
  2. Cluster_1000    16      4
  3. Cluster_10      9       1
  4. Cluster_1       7       1
  5. Cluster_100     6       1
  6. );
复制代码

论坛徽章:
6
卯兔
日期:2013-11-26 14:52:02丑牛
日期:2014-02-19 18:01:25卯兔
日期:2014-05-20 20:34:06白羊座
日期:2014-05-23 13:39:232015亚冠之大阪钢巴
日期:2015-08-07 20:57:582015亚冠之大阪钢巴
日期:2015-09-02 14:09:09
10 [报告]
发表于 2013-11-21 11:30 |只看该作者
10         if(exists $hash{$line[2]}){
11            $hash{$line[2]}++;
12            if(exists $chek{$line[0]}){
13               $pare{$line[2]}++;
14            }else{
15               $chek{$line[0]}=1;
16            }
17         }
第二个if写在第一个if里面是有问题的,导致第一个$line[0]统计不到
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP