免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: huang6894
打印 上一主题 下一主题

学渣求学霸帮忙改改作业。。。 [复制链接]

论坛徽章:
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
11 [报告]
发表于 2014-03-11 16:00 |只看该作者
{:2_172:} 大神! 这个, 内存占用小了。
  1. #!/usr/bin/perl

  2. my %code = (
  3.     'TCA' => 'S',    # Serine
  4.     'TCC' => 'S',    # Serine
  5.     'TCG' => 'S',    # Serine
  6.     'TCT' => 'S',    # Serine
  7.     'TTC' => 'F',    # Phenylalanine
  8.     'TTT' => 'F',    # Phenylalanine
  9.     'TTA' => 'L',    # Leucine
  10.     'TTG' => 'L',    # Leucine
  11.     'TAC' => 'Y',    # Tyrosine
  12.     'TAT' => 'Y',    # Tyrosine
  13.     'TAA' => '_',    # Stop
  14.     'TAG' => '_',    # Stop
  15.     'TGC' => 'C',    # Cysteine
  16.     'TGT' => 'C',    # Cysteine
  17.     'TGA' => '_',    # Stop
  18.     'TGG' => 'W',    # Tryptophan
  19.     'CTA' => 'L',    # Leucine
  20.     'CTC' => 'L',    # Leucine
  21.     'CTG' => 'L',    # Leucine
  22.     'CTT' => 'L',    # Leucine
  23.     'CCA' => 'P',    # Proline
  24.     'CCC' => 'P',    # Proline
  25.     'CCG' => 'P',    # Proline
  26.     'CCT' => 'P',    # Proline
  27.     'CAC' => 'H',    # Histidine
  28.     'CAT' => 'H',    # Histidine
  29.     'CAA' => 'Q',    # Glutamine
  30.     'CAG' => 'Q',    # Glutamine
  31.     'CGA' => 'R',    # Arginine
  32.     'CGC' => 'R',    # Arginine
  33.     'CGG' => 'R',    # Arginine
  34.     'CGT' => 'R',    # Arginine
  35.     'ATA' => 'I',    # Isoleucine
  36.     'ATC' => 'I',    # Isoleucine
  37.     'ATT' => 'I',    # Isoleucine
  38.     'ATG' => 'M',    # Methionine
  39.     'ACA' => 'T',    # Threonine
  40.     'ACC' => 'T',    # Threonine
  41.     'ACG' => 'T',    # Threonine
  42.     'ACT' => 'T',    # Threonine
  43.     'AAC' => 'N',    # Asparagine
  44.     'AAT' => 'N',    # Asparagine
  45.     'AAA' => 'K',    # Lysine
  46.     'AAG' => 'K',    # Lysine
  47.     'AGC' => 'S',    # Serine
  48.     'AGT' => 'S',    # Serine
  49.     'AGA' => 'R',    # Arginine
  50.     'AGG' => 'R',    # Arginine
  51.     'GTA' => 'V',    # Valine
  52.     'GTC' => 'V',    # Valine
  53.     'GTG' => 'V',    # Valine
  54.     'GTT' => 'V',    # Valine
  55.     'GCA' => 'A',    # Alanine
  56.     'GCC' => 'A',    # Alanine
  57.     'GCG' => 'A',    # Alanine
  58.     'GCT' => 'A',    # Alanine
  59.     'GAC' => 'D',    # Aspartic Acid
  60.     'GAT' => 'D',    # Aspartic Acid
  61.     'GAA' => 'E',    # Glutamic Acid
  62.     'GAG' => 'E',    # Glutamic Acid
  63.     'GGA' => 'G',    # Glycine
  64.     'GGC' => 'G',    # Glycine
  65.     'GGG' => 'G',    # Glycine
  66.     'GGT' => 'G',    # Glycine
  67. );
  68. # @ARGV = qw/sca cd/;
  69. my ( $one, $two ) = @ARGV;
  70. open my ($TWO), $two;
  71. my %cds;

  72. while (<$TWO>) {
  73.     my ( $chr, $s, $e, $p ) = ( split /\s+/, $_, 6 )[ 0, 3, 4, 2 ];
  74.     next if $p ne 'CDS';
  75.     my $l = $e - $s + 1;
  76.     push @{ $cds{$chr} }, [ $s, $l, $_ ];
  77. }

  78. open OUT, '>', 'Sequence_extraction_part.fa' or die "don't worry";
  79. open AA,  '>', 'aa_extraction_part.fa'       or die "be happy";
  80. open my ($ONE), $one;

  81. $/ = '>';
  82. <$ONE>;

  83. while (<$ONE>) {
  84.     my ( $key, @seq ) = split /\n/;
  85.     ($key) = $key =~ /^(\w+)/;
  86.     next unless exists $cds{$key};
  87.     my $seq = join '', @seq;
  88.     chop $seq if $seq =~ />$/;
  89.     for my $k ( @{ $cds{$key} } ) {
  90.         extract( $seq, @$k );
  91.     }

  92. }

  93. close OUT;
  94. close AA;

  95. sub extract {
  96.     my ( $SEQ, $start, $len, $m ) = @_;
  97.     my $Seq = substr $SEQ, $start - 1, $len;
  98.     my $aa;
  99.     while ( $Seq =~ /(.{3})/g ) {
  100.         $aa .= $code{$1} || bad_codon($1);
  101.     }
  102.     my ( @OUT, @AA );
  103.     my ( $lenseq, $lenaa ) = ( length($Seq), length($aa) );
  104.     for ( my $j = 0 ; $j * 60 < $lenseq ; $j++ ) {
  105.         push @OUT, substr( $Seq, $j * 60, 60 ), "\n";
  106.     }
  107.     for ( my $i = 0 ; $i * 60 < $lenaa ; $i++ ) {
  108.         push @AA, substr( $aa, $i * 60, 60 ), "\n";
  109.     }
  110.     print OUT ">$m", @OUT;
  111.     print AA ">$m",  @AA;
  112. }

  113. sub bad_codon {
  114.     my $bad = shift;
  115.     print qq[Bad codon "$bad"!!\n];
  116.     exit;
  117. }
复制代码
回复 10# huang6894


   

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
12 [报告]
发表于 2014-03-11 17:01 |只看该作者
回复 11# pitonas


    吐司大神。。。。 谢谢,谢谢

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
13 [报告]
发表于 2014-03-12 16:28 |只看该作者
回复 11# pitonas


   吐司大神。。。我做测试的时候。。。发现一个问题:
不知道我的操作哪错了。。。

我的输入文件(第二个文本):

  1. 》head -3 Prunus_mume_scaffold.gff
  2. scaffold101     GLEAN   mRNA    1862    8809    0.997087        -       .       ID=Pm020658;
  3. scaffold101     GLEAN   CDS     1862    2248    .       -       0       Parent=Pm020658;
  4. scaffold101     GLEAN   CDS     2709    2861    .       -       0       Parent=Pm020658;
  5. 》cut -f1 Prunus_mume_scaffold.gff|sort|uniq|wc -l
  6. 41
  7. 》 grep 'scaffold' Prunus_mume_scaffold.gff|grep CDS|wc -l
  8. 47536
复制代码
我的输入文件(第一个文本):

  1. 格式:
  2. >scaffold16 36.5
  3. AATTTTCGCTGGGTTGGGTGTGTCAATTTTTGGCCCAAACACAAACCCACCGTGAGGGTACCCCCGAGTTGCCTTGAGACAGTCAGTTATTTTTCCTCACGAGTTTCGGGGACGCCTGAACCGTGTAGTGCCAGGTTGCGGCTCGGATTGAGATGTG
  4. >scaffold35 33.2
  5. GTGTCTTTATATACATATAT
  6. 》grep scaffold plum_0630.scafSeq.FG|wc -l
  7. 41
复制代码
结果文件:
  1. >未优化程序:
  2. 》grep '>scaffold' Sequence_extraction_part.fa|wc -l
  3. 47536
  4. >大神优化后的程序一:
  5. 》grep '>' Sequence_extraction_part.fa|wc -l
  6. 1723
  7. 大神优化的程序二“
  8. 》grep '>scaffold' Sequence_extraction_part.fa|wc -l
  9. 427
复制代码
按道理来说最终结果应该是生成47536行的结果的呀,看了一下结果文件,大神的两个脚本第一个脚本只存在输入的第二个文本第一行建立的hash,第二个程序只存在输入的第一个文本的前两段建立的hash。。。大神能不能指导我一下呢?

论坛徽章:
0
14 [报告]
发表于 2014-03-12 16:40 |只看该作者
雖然黑吐司大神有解了

還是請問一下

你想做的事情是不是把序列(sequence)取出來之後

把CDS的部份給截選出來

再將他轉錄成胺基酸(amino-acid)

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
15 [报告]
发表于 2014-03-12 16:41 |只看该作者
回复 14# afukada


    是的。。。就这么简单

论坛徽章:
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
16 [报告]
发表于 2014-03-12 17:17 |只看该作者
本帖最后由 pitonas 于 2014-03-12 10:19 编辑

{:2_172:} 大神,测试下
  1. #!/usr/bin/perl -w

  2. my $two = 'Prunus_mume_scaffold.gff';
  3. open my ($TWO), $two;
  4. my %cds;

  5. while (<$TWO>) {
  6.     my ( $chr, $s, $e, $p ) = ( split /\s+/, $_, 6 )[ 0, 3, 4, 2 ];
  7.     next if $p ne 'CDS';
  8.     my $l = $e - $s + 1;
  9.     push @{ $cds{$chr} }, [ $s, $l, $_ ];
  10. }

  11. my $cdssum;
  12. $cdssum += $_ for map { scalar @$_ } values %cds;

  13. print 'scaffold count = ', scalar keys %cds, "\n";
  14. print 'cds count = ', $cdssum, "\n";
复制代码
回复 13# huang6894


   

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
17 [报告]
发表于 2014-03-12 17:26 |只看该作者
回复 16# pitonas


    => perl hh.pl
scaffold count = 41
cds count = 47536

然后咧?

论坛徽章:
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
18 [报告]
发表于 2014-03-12 17:35 |只看该作者
{:2_172:} 大神
sub bad_codon {
    my $bad = shift;
    print qq[Bad codon "$bad"!!\n];
    exit;   # will exit the script unless $code{$1}
}
108:
  1.         $aa .= $code{$1} || bad_codon($1);
复制代码
exit the script unless $code{$1}
因为在中间退出,所以它不能打印完成
$aa .= $code{$1} || 'X';    # X => NO KEY IN %code;

回复 17# huang6894


   

论坛徽章:
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
19 [报告]
发表于 2014-03-12 17:40 |只看该作者
{:2_172:} 大神的代码
145, 146, 147
  1.        return  "Bad codon \"$codon\"!!\n";  # return 返回
  2.                 exit; # 因为返回return 所以它永远不会执行这条 exit
  3.                 }
  4. }
复制代码

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
20 [报告]
发表于 2014-03-12 17:42 |只看该作者
回复 18# pitonas


    ( ⊙o⊙ )哦,sorry,sorry。。。我没仔细研究好,问题解决了,谢谢大大谢谢大大
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP