Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 我如何计算G+;C、 GC%_Perl - Fatal编程技术网

Perl 我如何计算G+;C、 GC%

Perl 我如何计算G+;C、 GC%,perl,Perl,我有一个perl脚本,它在每0-200个碱基对中计算ATGC,最多1000个,即0-200、1-201、2-202、最多1000个。我还想计算0-200,1-201…到1000的G+C碱基,并计算这些区域的GC%。我怎样才能做到这一点 Perl脚本是: #! perl -slw use strict; my $dna = do{ local $/; <DATA> }; $dna =~ tr[\n][]d; my %counts; ++$counts{ substr $dna, $

我有一个perl脚本,它在每0-200个碱基对中计算ATGC,最多1000个,即0-200、1-201、2-202、最多1000个。我还想计算0-200,1-201…到1000的G+C碱基,并计算这些区域的GC%。我怎样才能做到这一点

Perl脚本是:

#! perl -slw
use strict;

my $dna = do{ local $/; <DATA> };
$dna =~ tr[\n][]d;

my %counts;
++$counts{ substr $dna, $_, 1 } for 0 .. 199;

for my $offset ( 0 .. length( $dna )-200 ) {
    printf "range: %d .. %d A:%d C:%d G:%d T:%d\n", $offset, $offset+199, @counts{ qw[ A C G T ] };
    --$counts{ substr $dna, $offset, 1 };
    ++$counts{ substr $dna, $offset+200, 1 };
}

__DATA__
TGCCATCGCGCCAGGAGGGAAGACCAGTTGCTCTGGGTAAATCAGCCGTGAGCGTATCTGTCCCTCTTATAATTAGGAGTTTAAACTCTACGATGTTACC
ATCCTTGAATCAGGTATATACCGCACTGAAACATCGTCGGCTTTGGGCTCATTCGCTACCCTGTCGCTGATATGCGATCTATTCTACATATGCGGGGCCA
CCCAATGTCGATTGTCATGAGGAGGGGGTCATAACGACTCACTATAGGACCAGCACGTCCGGTTGCGCTGAGTAAAATAGAGCTACAAAAGACACAGTAC
TCCAAGATGTAAAGGGGAAGACGGGACCTGGGTCGGGGGCGCAACTTCACTGAGCTTTTAACCTTGCGCGCATGCGAGAGCCTTTCCGCTTAGGAAATGC
TGTAAGATCAAGTGGTAGGACTATTGAGAGGTCTTACCTTGCCGCAGCAACGTGGACGGCGACCGGATAATTTAAGGCCGACATTCAATATAGAATGTCA
GGGAGCAGAACTGTATCCCAAATGCTAGTTGTAGGTGTACGAGCGCACCTGGGGACCTATCGCTCCGACGGGGTCTGCGTAGCCCATACATCCTGCCAGC
ACTGGGGCTATTGAACGGTCAATCCGTAATGTACTCGCTGAATGCTCAGGGATTCCTTAATCTTTGAGCACGCGGCTTCTCTCACTTTTCTCACGTCAAC
CCTGACTCATAACGGAGTTCGGCAGTCCCGGAACGGCTTATAGAAGCAATGCCTGAGTAGATAGCGTCAGGGATCGGCCCTACGTCGAGTCCAGTACGCC
ATTGGATGGAGGTCTCAGCCGTCGGTGGAGTGCGGCTCCACCCCCACATGAACGAGGTTGTTCCTGACCACCCCTGAAACTGTGAGAACCATTGTGTCGA
AACCAAGAGGCTTGCGTCGCGCTATAGGTCGATTGCCCCCTAGTTTCCCTATATTGAACGTGTTTCCATTAAAGACTCTCGGTAAATCTCACGTATTGCA

按照措辞,你的问题非常简单;让我怀疑我是否错过了什么

将打印内容替换为:

    printf "range: %d .. %d A:%d C:%d G:%d T:%d G+C:%d GC%%:%.1f\n", $offset, $offset+199, @counts{ qw[ A C G T ] }, $counts{'G'}+$counts{'C'}, ($counts{'G'}+$counts{'C'})/200*100;

它可以工作,但还有另一个问题(1)它产生的输出从290-489开始计数,而不是从0-199开始计数。我不知道问题出在哪里。(2) 如果我们只想打印GC%超过50%的输出区域,那么我们该怎么做呢?(1)您发布的代码没有这样做;您现在运行的代码有什么不同?(2) 在printf语句周围放置一个if:
if($counts{'G'}+$counts{'C'}>100){printf…;}
    printf "range: %d .. %d A:%d C:%d G:%d T:%d G+C:%d GC%%:%.1f\n", $offset, $offset+199, @counts{ qw[ A C G T ] }, $counts{'G'}+$counts{'C'}, ($counts{'G'}+$counts{'C'})/200*100;