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