免费注册 查看新帖 |

Chinaunix

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

生物信息,长度分布统计,求大神指导一下!!! [复制链接]

论坛徽章:
1
狮子座
日期:2014-02-25 09:46:33
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-23 17:27 |只看该作者 |倒序浏览
本帖最后由 旋转小马 于 2013-10-24 12:39 编辑

>a1;30266 K: 25 length: 7764
>a2;21197 K: 25 length: 1303
>a3;19639 K: 25 length: 6523
>a4;21559 K: 25 length: 1051
>a5;9715 K: 25 length: 815
>a6;60114 K: 25 length: 49
>a7;9601 K: 25 length: 1387
>a8;11933 K: 25 length: 1662
>a9;28016 K: 25 length: 96
>a10;5612 K: 25 length: 1879
>a11;12713 K: 25 length: 916
>a12;13947 K: 25 length: 442
>a13;5887 K: 25 length: 2657
>a14;2346 K: 25 length: 9605
>a15;9119 K: 25 length: 405
>a16;2507 K: 25 length: 4692
>a17;18192 K: 25 length: 100
>a18;8527 K: 25 length: 1909
>a19;2477 K: 25 length: 6703
>a20;12117 K: 25 length: 949
>a21;27978 K: 25 length: 49
>a22;10051 K: 25 length: 1189
>a23;6358 K: 25 length: 470
>a24;5987 K: 25 length: 3481
>a25;15254 K: 25 length: 94
>a26;2738 K: 25 length: 1960
>a27;6649 K: 25 length: 603
>a28;11581 K: 25 length: 543
>a29;4613 K: 25 length: 1895
>a30;6662 K: 25 length: 811
>a31;22138 K: 25 length: 35
>a32;8808 K: 25 length: 372 现在我需要做的是统计最后一列的分布个数,以10为一单位,
比如说,最后输出一文件,是按照0~10之间出现的个数,11~20之间出现的个数、、、、、、、、、以此类推,最后输出一个文档!!!

论坛徽章:
1
天蝎座
日期:2013-11-25 10:40:37
2 [报告]
发表于 2013-10-23 19:13 |只看该作者
本帖最后由 dqw233 于 2013-10-23 19:25 编辑
  1. use strict;
  2. use warnings;
  3. my %h;
  4. while (<DATA>) {
  5.     $_ =~ /(\d+)$/;
  6.     ($1 - 1) =~ /(.*).$/;
  7.     $h{$1||0} ++;
  8. }

  9. print "${_}1 ~ " . ($_ + 1) . "0 ==> $h{$_}\n" for sort {$a<=>$b}  keys %h;


  10. __DATA__
  11. asdf 123
  12. dfasdf 456
  13. adsfads 457
  14. asd 12
  15. aefd 98
  16. asdf 1
  17. asdf 2
  18. asdf 9
  19. asdf 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
3 [报告]
发表于 2013-10-24 01:23 |只看该作者
比如:
  1. #!/usr/bin/perl
  2. my ( $data, $result ) = qw/data result/;
  3. my ( $max,  %R )      = 0;

  4. open my $I, '<', $data;
  5. open my $O, '>', $result;

  6. while (<$I>) {
  7.     /(\d+)$/ and $R{ int 0.1 * ( $1 - 1 ) }++;
  8. }

  9. $_ > $max and $max = $_ for keys %R;

  10. for ( 0 .. $max ) {
  11.     my ( $A, $B, $C ) = ( $_, $_ + 1, $R{$_} // 0 );
  12.     print $O $A ? $A . '1' : 0, '-', $B, 0, "\t", $C, $/;
  13. }
复制代码

论坛徽章:
1
狮子座
日期:2014-02-25 09:46:33
4 [报告]
发表于 2013-10-24 11:12 |只看该作者
用你的代码实现了想要的结果,但是我是初学者,代码没看懂!!!回复 3# rubyish


   

论坛徽章:
1
狮子座
日期:2014-02-25 09:46:33
5 [报告]
发表于 2013-10-24 12:41 |只看该作者
  1 #!/usr/bin/perl -w
  2 use strict;
  3 open IN,"len.xls"or die"Can not open IN.\n";
  4 open OUT,">result.xls"or die"Can not open endfile.\n";
  5 my %hash;
  6 my $a;
  7 my $b;
  8 my $c;
  9 print OUT "block\tnum\n";
10 while(<IN>){
11         chomp;
12         my @line=split/\s+/,$_;
13         $hash{$line[-1]}=int($line[-1]/10);
14         if(exists $hash{$line[-1]}){
15            $hash{$line[-1]}++;
16         }else{
17            $hash{$line[-1]}=1;
18         }
19         $a=$hash{$line[-1]};
20         $b=$a*10;
21         $c=$b+9;
22         print OUT "$b~$c\t$hash{$line[-1]}\n";
23 }
24 close IN;
25 close OUT;这是我写的代码,输出的结果有错误,和你的不大一样,求大神帮忙给指导一下,万分感谢!回复 3# rubyish


   

论坛徽章:
1
狮子座
日期:2014-02-25 09:46:33
6 [报告]
发表于 2013-10-24 14:55 |只看该作者
万分谢谢,直接引用你的代码,实现了我要的结果!但是和我自己一开始写的思路不一样~~~回复 2# dqw233


   

论坛徽章:
1
金牛座
日期:2013-09-06 08:50:31
7 [报告]
发表于 2013-10-24 15:46 |只看该作者
本帖最后由 飞越地平线 于 2013-10-24 15:55 编辑

回复 6# 旋转小马

我觉得%hash的键为 int($line[-1]/10), 值为个数;
应该是IN读完,也就是统计完个数后再打印。


   

论坛徽章:
1
狮子座
日期:2014-02-25 09:46:33
8 [报告]
发表于 2013-10-24 18:22 |只看该作者
昂,我也是这么觉得,之前我用if(exists $hash{int($line[-1]/10)})   $hash{int($line[-1]/10)}++;好像报错,具体不知道该怎样用了,我是初学者,很多地方不明白,求大神指教!!!回复 7# 飞越地平线


   

论坛徽章:
1
金牛座
日期:2013-09-06 08:50:31
9 [报告]
发表于 2013-10-24 21:12 |只看该作者
本帖最后由 飞越地平线 于 2013-10-24 21:19 编辑

回复 8# 旋转小马

我也是菜鸟。
要加个花扩号;
  1. if(exists $hash{int($line[-1]/10)}){
  2.         $hash{int($line[-1]/10)}++;
  3. }
  4. 或者
  5. $hash{int($line[-1]/10)}++ if exists $hash{int($line[-1]/10)};
复制代码
小骆驼上控制结构那应该有说明的吧

   

论坛徽章:
1
狮子座
日期:2014-02-25 09:46:33
10 [报告]
发表于 2013-10-24 22:17 |只看该作者
嗯哪,明天在公司试试,住的地方电脑不好弄,不会再请教!!!回复 9# 飞越地平线


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP