免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5565 | 回复: 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
狮子座
日期:2014-02-25 09:46:33
18 [报告]
发表于 2013-10-30 11:18 |只看该作者
万分感谢,又学到了好多东西!!!回复 17# 飞越地平线


   

论坛徽章:
1
金牛座
日期:2013-09-06 08:50:31
17 [报告]
发表于 2013-10-29 16:36 |只看该作者
回复 16# 旋转小马

while书上有介绍。我只知道它是一个循环结构。在这里是一行一行读入。
你多看看小骆驼书,还有楼上几位写的代码。
  1. #!/usr/bin/perl -w
  2. use strict;
  3. my %hash;
  4. my $x;
  5. my $y;
  6. #my $number;
  7. while(<DATA>){
  8.         chomp;
  9.         my @line=split/\s+/,$_;
  10.         #$number=int($line[-1]/10);
  11.         if(exists $hash{int($line[-1]/10)}){
  12.            $hash{int($line[-1]/10)}++;
  13.         }else{
  14.            $hash{int($line[-1]/10)}=1;
  15.         }

  16. }
  17. map{
  18.         $x=$_*10;
  19.         $y=$x+9;
  20.         print "$x~$y\t".$hash{$_}."\n";
  21. } sort {$a<=>$b} keys %hash;

  22. __DATA__
  23. asdf 123
  24. dfasdf 456
  25. adsfads 457
  26. asd 12
  27. aefd 98
  28. asdf 1
  29. asdf 2
  30. asdf 9
  31. asdf 10
复制代码

论坛徽章:
1
狮子座
日期:2014-02-25 09:46:33
16 [报告]
发表于 2013-10-29 14:12 |只看该作者
原来是这样,while我还不大理解什么意思呢,继续学习,再次感谢,我想让区间从小到大排序如何实现呢?回复 15# 飞越地平线


   

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

回复 14# 旋转小马

那个要统计完个数存在%hash之后,然后打印出结果来的啊
  1. #!/usr/bin/perl -w
  2. use strict;
  3. my %hash;
  4. my $a;
  5. my $b;
  6. my $c;
  7. #my $number;
  8. while(<DATA>){
  9.         chomp;
  10.         my @line=split/\s+/,$_;
  11.         #$number=int($line[-1]/10);
  12.         if(exists $hash{int($line[-1]/10)}){
  13.            $hash{int($line[-1]/10)}++;
  14.         }else{
  15.            $hash{int($line[-1]/10)}=1;
  16.         }

  17. }
  18. map{
  19.         $a=$_;
  20.         $b=$a*10;
  21.         $c=$b+9;
  22.         print "$b~$c\t".$hash{$_}."\n";
  23. } sort keys %hash;

  24. __DATA__
  25. asdf 123
  26. dfasdf 456
  27. adsfads 457
  28. asd 12
  29. aefd 98
  30. asdf 1
  31. asdf 2
  32. asdf 9
  33. asdf 10
复制代码

论坛徽章:
1
狮子座
日期:2014-02-25 09:46:33
14 [报告]
发表于 2013-10-28 09:45 |只看该作者
本帖最后由 旋转小马 于 2013-10-28 09:45 编辑

  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 #my $number;
10 while(<IN>){
11         chomp;
12         my @line=split/\s+/,$_;
13         #$number=int($line[-1]/10);
14         if(exists $hash{int($line[-1]/10)}){
15            $hash{int($line[-1]/10)}++;
16         }else{
17            $hash{int($line[-1]/10)}=1;
18         }
19         $a=$hash{int($line[-1]/10)};
20         $b=$a*10;
21         $c=$b+9;
22         print "$b~$c\t$a\n";
23 }
24 close IN;
25 close OUT;这是我写的完整代码,最后无法实现呢,能不能帮我看看,是哪里出错了呢?回复 9# 飞越地平线


   

论坛徽章:
1
狮子座
日期:2014-02-25 09:46:33
13 [报告]
发表于 2013-10-27 22:00 |只看该作者
嗯嗯,好的,明天到公司试一试,这样的更简单,谢啦~~~回复 12# rdcwayx


   

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
12 [报告]
发表于 2013-10-25 10:42 |只看该作者
by awk
  1. awk '{a[int($NF/10)]++}END{for (i in a) print i*10 "-" i*10+9,a[i]}' infile |sort -n
  2. 30-39 1
  3. 40-49 2
  4. 90-99 2
  5. 100-109 1
  6. 370-379 1
  7. 400-409 1
  8. 440-449 1
  9. 470-479 1
  10. 540-549 1
  11. 600-609 1
  12. 810-819 2
  13. 910-919 1
  14. 940-949 1
  15. 1050-1059 1
  16. 1180-1189 1
  17. 1300-1309 1
  18. 1380-1389 1
  19. 1660-1669 1
  20. 1870-1879 1
  21. 1890-1899 1
  22. 1900-1909 1
  23. 1960-1969 1
  24. 2650-2659 1
  25. 3480-3489 1
  26. 4690-4699 1
  27. 6520-6529 1
  28. 6700-6709 1
  29. 7760-7769 1
  30. 9600-9609 1
复制代码

论坛徽章:
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
11 [报告]
发表于 2013-10-25 00:43 |只看该作者
BiRu:
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my %range;

  5. while (<DATA>) {
  6.     my @line = split;
  7.     my $number = int( ( $line[-1] - 1 ) / 10 );

  8.     # buhao:    my $number = int( $line[-1] / 10 );
  9.     # biru:     11 => int 11/10 = 1   OK
  10.     # danshi:   10 => int 10/10 = 1   NG
  11.     # yinwei:   10 => range 0, 11 => range 1
  12.     # suoyi:    10 => int( ( 10 - 1 ) / 10 ) = 0  OK
  13.     # yiji:     11 => int( ( 11 - 1 ) / 10 ) = 1  OK
  14.     # yiji:     0  => int( ( 0 - 1 ) / 10 )  = 0  OK

  15.     $range{$number}++;
  16. }

  17. # xianzai %range: { 1 => 2, 4 => 1, 0 => 4 }

  18. my $max = 0;
  19. for ( keys %range ) {
  20.     $max = $_ if $max < $_;
  21. }

  22. # print "max: $max\n";
  23. # max: 4

  24. for ( 0 .. $max ) {
  25.     my $begin = $_ ? ( $_ * 10 ) + 1 : 0;

  26.     # buhao:    my $begin = $_ * 10 + 1;
  27.     # biru:     1 => 1 * 10 + 1 = 11   OK: 11-
  28.     # danshi:   0 => 0 * 10 + 1 = 1    NG: 1-, OK: 0-

  29.     my $end   = ( $_ + 1 ) * 10;

  30.     # buhao:    my $end = $begin + 9;
  31.     # biru:     11 + 9 = 20    OK: 11-20
  32.     # danshi:   0 + 9 = 9      NG: 0-9, OK: 0-10
  33.     # huo:      my $end = ( $_ + 1 ) . '0';
  34.     # huo:      my @end = ( $_ + 1, 0 );
  35.     # huo:      my $end = $begin + $_ ? 9 : 10;

  36.     my $count = $range{$_} // 0;
  37.    
  38.     # buhao:    my $count = $range{$_};
  39.     # biru:     21-30
  40.     # Use of uninitialized value $count in print....
  41.     # 11-20 2
  42.     # 21-30 HERE EMPTY
  43.    
  44.     print $begin, '-', $end, "\t", $count, "\n";
  45. }

  46. __DATA__
  47. a 1
  48. b 2
  49. c 0
  50. d 10
  51. e 11
  52. f 12
  53. g 44
复制代码
  1. 0-10    4
  2. 11-20   2
  3. 21-30   0
  4. 31-40   0
  5. 41-50   1
复制代码

论坛徽章:
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