免费注册 查看新帖 |

Chinaunix

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

求助代码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-12 11:01 |只看该作者 |倒序浏览
一 把基因名(16191_NC_003284)下I001序列和I004序列互换,I002和I003互换,E开头的序列位置不变。还句话说就是把原来I001,I002,I003,I004序列顺序颠倒一下,降序排列。
二 I开头的序列比较多,其基因名庞大,需要批量处理。序列如下:
16191_NC_003284
I001CACTCAATAAATGAAGGAACTTTTGAGAGCTTAA
E012ATGACAAGGAAGCGGCGGACATTGAA
I002CACTCAAGTCTGCCGTTT
E023ATGGAAGAGATGAGAAAAAGGGCGAGGCTTATGA
I003CACCCATTAAAAAAATCCTATATCAAACACATCGTTTTCAGT
E034CGGATCAGTTGTTTCGTCATATTTC
I004CATTCAAAAGCCTTGAAAAAAATTTTAC
E045AGCAAATGAAGGCCGTTTCAACCGAACGAAAACGCGG

16192_NC_003284
I001CACAAGAACTAGGTACTTTG
E012TCTACAACACGTCTGCTCTCTGTG
I002CATGCTAAAAGCTAGTC
E023GCTGCAGAGAAGAAGGTTCTATGCGGACAACT
处理之后结果为:
16191_NC_003284
I004CATTCAAAAGCCTTGAAAAAAATTTTAC
E012ATGACAAGGAAGCGGCGGACATTGAA
I003CACCCATTAAAAAAATCCTATATCAAACACATCGTTTTCAGT
E023ATGGAAGAGATGAGAAAAAGGGCGAGGCTTATGA
I002CACTCAAGTCTGCCGTTT
E034CGGATCAGTTGTTTCGTCATATTTC
I001CACTCAATAAATGAAGGAACTTTTGAGAGCTTAA
E045AGCAAATGAAGGCCGTTTCAACCGAACGAAAACGCGG

16192_NC_003284
I002CATGCTAAAAGCTAGTC
E012TCTACAACACGTCTGCTCTCTGTG
I001CACAAGAACTAGGTACTTTG
E023GCTGCAGAGAAGAAGGTTCTATGCGGACAACT

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
2 [报告]
发表于 2013-01-12 16:15 |只看该作者
回复 1# zhagnqiang829
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use Data::Dumper;
  5. my %hash;
  6. while(<DATA>){
  7.     /(\d+_NC_\d+)/?$hash{$1}=():push @{$hash{$1}},$_;
  8. }
  9. map{print "$_\n";
  10.     my (@arr_i,@arr_e);
  11.     for (@{$hash{$_}}){
  12.     /^I\d+.*/?push  @arr_i,$_:push @arr_e,$_;
  13.     }
  14.     for (sort{$b cmp $a}@arr_i){
  15.         print "$_";
  16.         print shift @arr_e;
  17.         }
  18.     print "\n";
  19.    
  20.     }sort keys %hash;
  21. __DATA__
  22. 16191_NC_003284
  23. I001CACTCAATAAATGAAGGAACTTTTGAGAGCTTAA
  24. E012ATGACAAGGAAGCGGCGGACATTGAA
  25. I002CACTCAAGTCTGCCGTTT
  26. E023ATGGAAGAGATGAGAAAAAGGGCGAGGCTTATGA
  27. I003CACCCATTAAAAAAATCCTATATCAAACACATCGTTTTCAGT
  28. E034CGGATCAGTTGTTTCGTCATATTTC
  29. I004CATTCAAAAGCCTTGAAAAAAATTTTAC
  30. E045AGCAAATGAAGGCCGTTTCAACCGAACGAAAACGCGG

  31. 16192_NC_003284
  32. I001CACAAGAACTAGGTACTTTG
  33. E012TCTACAACACGTCTGCTCTCTGTG
  34. I002CATGCTAAAAGCTAGTC
  35. E023GCTGCAGAGAAGAAGGTTCTATGCGGACAACT
复制代码

论坛徽章:
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
3 [报告]
发表于 2013-01-12 17:27 |只看该作者
关键代码给点注释就好了回复 2# mcshell


   

论坛徽章:
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 [报告]
发表于 2013-01-12 18:24 |只看该作者
本帖最后由 rubyish 于 2013-01-12 14:37 编辑

如下:
  1. #!/usr/bin/perl
  2. local $/ = "\n\n";
  3. while (<DATA>) {
  4.     my ( @i, @e );
  5.     my @a = split;
  6.     my $t = shift @a;
  7.     /^I/ ? unshift( @i, $_ ) : push( @e, $_ ) for @a;
  8.     print "$t\n", map { "$i[$_]\n$e[$_]\n" } 0 .. $#i;
  9.     print "\n";
  10. }
  11. __DATA__
  12. 16191_NC_003284
  13. I001CACTCAATAAATGAAGGAACTTTTGAGAGCTTAA
  14. E012ATGACAAGGAAGCGGCGGACATTGAA
  15. I002CACTCAAGTCTGCCGTTT
  16. E023ATGGAAGAGATGAGAAAAAGGGCGAGGCTTATGA
  17. I003CACCCATTAAAAAAATCCTATATCAAACACATCGTTTTCAGT
  18. E034CGGATCAGTTGTTTCGTCATATTTC
  19. I004CATTCAAAAGCCTTGAAAAAAATTTTAC
  20. E045AGCAAATGAAGGCCGTTTCAACCGAACGAAAACGCGG

  21. 16192_NC_003284
  22. I001CACAAGAACTAGGTACTTTG
  23. E012TCTACAACACGTCTGCTCTCTGTG
  24. I002CATGCTAAAAGCTAGTC
  25. E023GCTGCAGAGAAGAAGGTTCTATGCGGACAACT
复制代码

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
5 [报告]
发表于 2013-01-12 21:58 |只看该作者
回复 4# rubyish


    还是原来的头像萌啊

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
6 [报告]
发表于 2013-01-13 01:17 |只看该作者
本帖最后由 yinyuemi 于 2013-01-13 01:20 编辑
  1. #!/usr/bin/env perl
  2. use strict;
  3. my @data;
  4. while(<DATA>){
  5.     if (/^\d/){print;undef(@data)};
  6.     push @data,$_ if /^[IE]/;
  7.     f() if /^$/ ;
  8. }
  9. f();
  10. sub f(){
  11.      map{print $data[$#data-2*$_-1],$data[2*$_+1]}0..$#data/2;
  12.      print "\n";
  13. }
  14. __DATA__
  15. 16191_NC_003284
  16. I001CACTCAATAAATGAAGGAACTTTTGAGAGCTTAA
  17. E012ATGACAAGGAAGCGGCGGACATTGAA
  18. I002CACTCAAGTCTGCCGTTT
  19. E023ATGGAAGAGATGAGAAAAAGGGCGAGGCTTATGA
  20. I003CACCCATTAAAAAAATCCTATATCAAACACATCGTTTTCAGT
  21. E034CGGATCAGTTGTTTCGTCATATTTC
  22. I004CATTCAAAAGCCTTGAAAAAAATTTTAC
  23. E045AGCAAATGAAGGCCGTTTCAACCGAACGAAAACGCGG

  24. 16192_NC_003284
  25. I001CACAAGAACTAGGTACTTTG
  26. E012TCTACAACACGTCTGCTCTCTGTG
  27. I002CATGCTAAAAGCTAGTC
  28. E023GCTGCAGAGAAGAAGGTTCTATGCGGACAACT
复制代码

论坛徽章:
0
7 [报告]
发表于 2013-01-13 10:10 |只看该作者
ok ,Thank you very much.

论坛徽章:
0
8 [报告]
发表于 2013-01-13 10:19 |只看该作者
1 如果我要实现下面情况改怎么处理:数据如下
16191_NC_003284
I001CACTCAATAAATGAAGGAACTTTTGAGAGCTTAA
E012ATGACAAGGAAGCGGCGGACATTGAA
I002CACTCAAGTCTGCCGTTT
E023ATGGAAGAGATGAGAAAAAGGGCGAGGCTTATGA

16192_NC_003284
I001CACAAGAACTAGGTACTTTG
E012TCTACAACACGTCTGCTCTCTGTG
2 结果为:
16191_NC_003284
I001CACTCAATAAATGAAGGAACTTTTGAGAGCTTAA
E012ATGACAAGGAAGCGGCGGACATTGAA
I001CACTCAATAAATGAAGGAACTTTTGAGAGCTTAA
E023ATGGAAGAGATGAGAAAAAGGGCGAGGCTTATGA
I002CACTCAAGTCTGCCGTTT
E012ATGACAAGGAAGCGGCGGACATTGAA
I002CACTCAAGTCTGCCGTTT
E023ATGGAAGAGATGAGAAAAAGGGCGAGGCTTATGA

16192_NC_003284
I001CACAAGAACTAGGTACTTTG
E012TCTACAACACGTCTGCTCTCTGTG

3 说明:在I001后分别把E0**序列放后面,同理I002,I003.......I00*.
回复 4# 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
9 [报告]
发表于 2013-01-13 12:03 |只看该作者
在I001后分别把E0**序列放后面,同理I002,I003.......I00*.
如下:
  1. #!/usr/bin/perl
  2. $/ = "\n\n";
  3. while (<DATA>) {
  4.     my @i = ( [], [] );
  5.     my @a  = /^(\w+\n)/mg;
  6.     my $t  = shift @a;
  7.     push $i[/^E/], $_ for @a;
  8.     print $t, map { $a = $_; map "$a$_", @{$i[1]} } @{$i[0]};
  9.     print "\n";
  10. }
  11. __DATA__
  12. 16191_NC_003284
  13. I001CACTCAATAAATGAAGGAACTTTTGAGAGCTTAA
  14. E012ATGACAAGGAAGCGGCGGACATTGAA
  15. I002CACTCAAGTCTGCCGTTT
  16. E023ATGGAAGAGATGAGAAAAAGGGCGAGGCTTATGA

  17. 16192_NC_003284
  18. I001CACAAGAACTAGGTACTTTG
  19. E012TCTACAACACGTCTGCTCTCTGTG
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP