请问如何查找一串字符中某个字符或字符串的出现次数
大家好,我是学生物的,对Perl了解的不多,现有问题想向大家请教一下。我有一条DNA序列,如下:
GGATCCCCCGGGCTGCAGGAATTCGAATTAGAAAATCAAAGTATATGTTAGTTATTTAAA
TTTTGAAGAAAAACGAATAGTTTTCATTATAAAAAAGTAAATGTTCGAAGTATCTTACTT
CATGATATGCAAATAATAATGAAATAGAGTCTAGACAGATGAAAGCAATACATAATTGTT
GAACCAAATCATAAAGAAGTAGGATAAAGATGCCCTATTACAGTTGATAATTATTAATCG
TTCAGTGAACACTAATCATGATGGATTATGAATTTAAAATGAAAACTCAAAAAGATAGAA
TTAAAGTTGAAGATTTATTTGAATTCGAGGGTTGTAAAGTCGGTCGAGGAACCTATGGCC
ATGTCTACAAGGCTCGAAGAAAAGAAGGAGTACCAGATAGTGAATTAAAAAGTAGACCAG
ATACAAAAGATTTTGCATTGAAACAAATTGAAGGTACTGGTCTTTCTATGTCTGCTTGTA
GAGAAATTACACTTCTTAGGGAACTTAAGCATATAAATGTTATTACTCTTATTCGAGTAT
TTTTATCACACAATGATCGGAAAGTTTGGTTACTTTTTGATTTTGCAGAGCATGATTTAT
GGCATATTATAAAATTCCATAGAGCTGCAAAAGCTAATAAAAAACAAATTATGGTACCAA
AGGGCATGGTAAAATCCTTACTATATCAAATA
1 我想统计这条序列的长度
2 我想计算下序列中单字符A,T,C,G出现的次数,双字符AA,AT,AG,AC等4乘4共16个2字符组合的次数,以至3字符组合和更多的组合的出现次数,请问怎么实现?
万分感谢!
GGATCCCCCGGGCTGCAGGAATTCGAATTAGAAAATCAAAGTATATGTTAGTTATTTAAA
TTTTGAAGAAAAACGAATAGTTTTCATTATAAAAAAGTAAATGTTCGAAGTATCTTACTT
CATGATATGCAAATAATAATGAAATAGAGTCTAGACAGATGAAAGCAATACATAATTGTT
GAACCAAATCATAAAGAAGTAGGATAAAGATGCCCTATTACAGTTGATAATTATTAATCG
TTCAGTGAACACTAATCATGATGGATTATGAATTTAAAATGAAAACTCAAAAAGATAGAA
TTAAAGTTGAAGATTTATTTGAATTCGAGGGTTGTAAAGTCGGTCGAGGAACCTATGGCC
ATGTCTACAAGGCTCGAAGAAAAGAAGGAGTACCAGATAGTGAATTAAAAAGTAGACCAG
ATACAAAAGATTTTGCATTGAAACAAATTGAAGGTACTGGTCTTTCTATGTCTGCTTGTA
GAGAAATTACACTTCTTAGGGAACTTAAGCATATAAATGTTATTACTCTTATTCGAGTAT
TTTTATCACACAATGATCGGAAAGTTTGGTTACTTTTTGATTTTGCAGAGCATGATTTAT
GGCATATTATAAAATTCCATAGAGCTGCAAAAGCTAATAAAAAACAAATTATGGTACCAA
AGGGCATGGTAAAATCCTTACTATATCAAATA
1 我想统计这条序列的长度
2 我想计算下序列中单字符A,T,C,G出现的次数,双字符AA,AT,AG,AC等4乘4共16个2字符组合的次数,以至3字符组合和更多的组合的出现次数,请问怎么实现?
万分感谢!
作者: sunbaofa 发布时间: 2011-06-03
去掉空格和换行计算长度用 length
碱基不是三个一组吗?如果跨两组的算不算
再比如 ACA 是不是要算一次 AC 再算一次 CA?
碱基不是三个一组吗?如果跨两组的算不算
再比如 ACA 是不是要算一次 AC 再算一次 CA?
作者: zhlong8 发布时间: 2011-06-03
我不是看一组的,就是看连续2个字符出现的次数,比如ACA中,AC和CA都算出现了一次。
我的想法就是对于每个字母组合,都从序列的开头读一遍,只要碰到,number就要加一,有多少个组合就做多少次遍历,大概的思路我清楚,不过不明白具体的程序该怎么编。
对了,我举的是个最简单的例子,我的数据是批量的,含有多个序列。
我的想法就是对于每个字母组合,都从序列的开头读一遍,只要碰到,number就要加一,有多少个组合就做多少次遍历,大概的思路我清楚,不过不明白具体的程序该怎么编。
对了,我举的是个最简单的例子,我的数据是批量的,含有多个序列。
作者: sunbaofa 发布时间: 2011-06-03
while ($str =~ /(.(?=(.)))/g) { $counter{$1 . $2}++ }
这是计算两个的,一个和三个类似
这是计算两个的,一个和三个类似
作者: zhlong8 发布时间: 2011-06-03
#!/usr/bin/perl
use strict;
use warnings;
my $s = "GGATCCCCCGGGCTGCAGGAATTCGAATTAGAAAATCAAAGTATATGTTAGTTATTTAAATTTT";
my @temp;
my $length = length($s);
my $times_A = (@temp) = ($s =~ /(A)/g);
print "$length\t$times_A";
如果数据量不是非常大,可以用正则。
use strict;
use warnings;
my $s = "GGATCCCCCGGGCTGCAGGAATTCGAATTAGAAAATCAAAGTATATGTTAGTTATTTAAATTTT";
my @temp;
my $length = length($s);
my $times_A = (@temp) = ($s =~ /(A)/g);
print "$length\t$times_A";
如果数据量不是非常大,可以用正则。
作者: iamlimeng 发布时间: 2011-06-03
非常感谢楼上各位,但至于怎么用正则,不是很明白,一开始我也想过用正则,但用的话假如我查AT,怎么保证查的次数只是AT的呢?而下面查AC,次数又只是AC的?我不敢用是担心用正则了只要符合A,T,C,G组合的都算上次数,了解的不是很深入,望各位赐教。
批量的数据是这个格式的:
文件111,内容如下:
>Contig1
GGATCCCCCGGGCTGCAGGAATTCGAATTCGAATCGATTCGAATTCAACTTAATAGGTTA
TGTTAGTAATATTAGATTAGTTTTTACTGTATGTTTGCAGTATATAACATATATGTTATA
AACTGCAAACATACAGTATAAACCAATCAAAATTTGTTTATTATAAAATAATAACATTAT
ATTGACATAGTGAATAGAAGAGGTAATGTACATAGGAAGTGTTAATTGAATTTTAAGGAA
AGGATGTCTCTATACGACGATTTTGATAAGCATCGTACAACTGATAAAGTAGCAGGATGG
TCGTCTGGAATAAAATTACTCCAGTCTCAACTTCAACTTAAAAAAGCTGCAATACCACAC
GGTAAAAGAGAACAAGGGAAAAAATCTGCAGCTGTACTGGCACCGGTTATCGATTTAAAG
TCCAAAGTTCGCGATAACGACAAAGAAGACGATGGGGTTATAAAATATTTTTCAACAAAC
GCAGCTAATCCAATTGGAGTTGGGATAGAATATGATTGGAATGTAGTTAATGAATATGAT
CCATCTTGGCCTAACGAGTATGATAAAGTAGTCAAAGAATTAAGAGACATTCGCGATCGT
GAACATGACCAAGAAAATGAGCAACGTAAGCGGAGACGAGAAACCACTCATTTTGAAGAA
AATCAGATGTCAAATATAGCCGCTAGTATAAATTCTATCGAAAGGGATGAAGAGCGCAGT
ACCTTTAGAAATAATCCTGGTGGTGCTACAATCGCTCCTCAACCATCCCTACAAGATGTA
CCTGAAATTGTTCCTCCGA
>Contig2
ATTGTATTTCTTCGCTTCTAAAGACGACAATAGTTTCGTGAGGCCAACGACTATGCCGTT
AATGAACAACAGTTTCTGCATAACCAGTCCTTGCGCCTCTACCAATAGTGGCCTCATCAG
TCGCAGTATGAACACCGATGGCTCGTCTCGACCCAGTTCAGTCTGCTCCATGCAATCTCG
GCCAATAAGAACCATTCCAACCTTGAAAAGGTCTACCCTCCAACACTGCAGCCCCACGAA
GATGCCACCGATGCGCGACCGTAGCAGCTCCTGTAGTGTAGCCCAGCGTCCGCAACCCGC
ACCCTCTAAAGCCTTACTTCGTACCGCATCTGGGCCAACTAGGCGAAATAGCACCAACGT
CATTAATTCCGGACTTGCGCAACGCGATTTTCACCGAGGCCTTATCCAAAACATAGAAAA
TCTGAAAATTTAGAATCTATTATTGTATTGAAAAAATTGCTATATTACATTATAAATATT
TTCAAACGAAAATAGCTTCGTGAGGCTAACAAAAAAAAAAAAAAAAAGCAACAGTTTCTG
CATAACCAGTTCTTGCGCCTCTCCCAATAGTGGCCTCATCAGTCGCAGTATGAACACCGA
TGGCTCGTCTCGACCCAGTTCAGTCTGCTCCATGCAATCTCGGCCAATAAGAACCATTCC
ACCCTTGAAAAGGTCTACCCTCCAACACTGC
>Contig3
GGATCCCCCGGGCTGCAGGAATTCGAATTAGAAAATCAAAGTATATGTTAGTTATTTAAA
TTTTGAAGAAAAACGAATAGTTTTCATTATAAAAAAGTAAATGTTCGAAGTATCTTACTT
CATGATATGCAAATAATAATGAAATAGAGTCTAGACAGATGAAAGCAATACATAATTGTT
GAACCAAATCATAAAGAAGTAGGATAAAGATGCCCTATTACAGTTGATAATTATTAATCG
TTCAGTGAACACTAATCATGATGGATTATGAATTTAAAATGAAAACTCAAAAAGATAGAA
TTAAAGTTGAAGATTTATTTGAATTCGAGGGTTGTAAAGTCGGTCGAGGAACCTATGGCC
ATGTCTACAAGGCTCGAAGAAAAGAAGGAGTACCAGATAGTGAATTAAAAAGTAGACCAG
ATACAAAAGATTTTGCATTGAAACAAATTGAAGGTACTGGTCTTTCTATGTCTGCTTGTA
GAGAAATTACACTTCTTAGGGAACTTAAGCATATAAATGTTATTACTCTTATTCGAGTAT
TTTTATCACACAATGATCGGAAAGTTTGGTTACTTTTTGATTTTGCAGAGCATGATTTAT
GGCATATTATAAAATTCCATAGAGCTGCAAAAGCTAATAAAAAACAAATTATGGTACCAA
AGGGCATGGTAAAATCCTTACTATATCAAATA
......
批量的数据是这个格式的:
文件111,内容如下:
>Contig1
GGATCCCCCGGGCTGCAGGAATTCGAATTCGAATCGATTCGAATTCAACTTAATAGGTTA
TGTTAGTAATATTAGATTAGTTTTTACTGTATGTTTGCAGTATATAACATATATGTTATA
AACTGCAAACATACAGTATAAACCAATCAAAATTTGTTTATTATAAAATAATAACATTAT
ATTGACATAGTGAATAGAAGAGGTAATGTACATAGGAAGTGTTAATTGAATTTTAAGGAA
AGGATGTCTCTATACGACGATTTTGATAAGCATCGTACAACTGATAAAGTAGCAGGATGG
TCGTCTGGAATAAAATTACTCCAGTCTCAACTTCAACTTAAAAAAGCTGCAATACCACAC
GGTAAAAGAGAACAAGGGAAAAAATCTGCAGCTGTACTGGCACCGGTTATCGATTTAAAG
TCCAAAGTTCGCGATAACGACAAAGAAGACGATGGGGTTATAAAATATTTTTCAACAAAC
GCAGCTAATCCAATTGGAGTTGGGATAGAATATGATTGGAATGTAGTTAATGAATATGAT
CCATCTTGGCCTAACGAGTATGATAAAGTAGTCAAAGAATTAAGAGACATTCGCGATCGT
GAACATGACCAAGAAAATGAGCAACGTAAGCGGAGACGAGAAACCACTCATTTTGAAGAA
AATCAGATGTCAAATATAGCCGCTAGTATAAATTCTATCGAAAGGGATGAAGAGCGCAGT
ACCTTTAGAAATAATCCTGGTGGTGCTACAATCGCTCCTCAACCATCCCTACAAGATGTA
CCTGAAATTGTTCCTCCGA
>Contig2
ATTGTATTTCTTCGCTTCTAAAGACGACAATAGTTTCGTGAGGCCAACGACTATGCCGTT
AATGAACAACAGTTTCTGCATAACCAGTCCTTGCGCCTCTACCAATAGTGGCCTCATCAG
TCGCAGTATGAACACCGATGGCTCGTCTCGACCCAGTTCAGTCTGCTCCATGCAATCTCG
GCCAATAAGAACCATTCCAACCTTGAAAAGGTCTACCCTCCAACACTGCAGCCCCACGAA
GATGCCACCGATGCGCGACCGTAGCAGCTCCTGTAGTGTAGCCCAGCGTCCGCAACCCGC
ACCCTCTAAAGCCTTACTTCGTACCGCATCTGGGCCAACTAGGCGAAATAGCACCAACGT
CATTAATTCCGGACTTGCGCAACGCGATTTTCACCGAGGCCTTATCCAAAACATAGAAAA
TCTGAAAATTTAGAATCTATTATTGTATTGAAAAAATTGCTATATTACATTATAAATATT
TTCAAACGAAAATAGCTTCGTGAGGCTAACAAAAAAAAAAAAAAAAAGCAACAGTTTCTG
CATAACCAGTTCTTGCGCCTCTCCCAATAGTGGCCTCATCAGTCGCAGTATGAACACCGA
TGGCTCGTCTCGACCCAGTTCAGTCTGCTCCATGCAATCTCGGCCAATAAGAACCATTCC
ACCCTTGAAAAGGTCTACCCTCCAACACTGC
>Contig3
GGATCCCCCGGGCTGCAGGAATTCGAATTAGAAAATCAAAGTATATGTTAGTTATTTAAA
TTTTGAAGAAAAACGAATAGTTTTCATTATAAAAAAGTAAATGTTCGAAGTATCTTACTT
CATGATATGCAAATAATAATGAAATAGAGTCTAGACAGATGAAAGCAATACATAATTGTT
GAACCAAATCATAAAGAAGTAGGATAAAGATGCCCTATTACAGTTGATAATTATTAATCG
TTCAGTGAACACTAATCATGATGGATTATGAATTTAAAATGAAAACTCAAAAAGATAGAA
TTAAAGTTGAAGATTTATTTGAATTCGAGGGTTGTAAAGTCGGTCGAGGAACCTATGGCC
ATGTCTACAAGGCTCGAAGAAAAGAAGGAGTACCAGATAGTGAATTAAAAAGTAGACCAG
ATACAAAAGATTTTGCATTGAAACAAATTGAAGGTACTGGTCTTTCTATGTCTGCTTGTA
GAGAAATTACACTTCTTAGGGAACTTAAGCATATAAATGTTATTACTCTTATTCGAGTAT
TTTTATCACACAATGATCGGAAAGTTTGGTTACTTTTTGATTTTGCAGAGCATGATTTAT
GGCATATTATAAAATTCCATAGAGCTGCAAAAGCTAATAAAAAACAAATTATGGTACCAA
AGGGCATGGTAAAATCCTTACTATATCAAATA
......
作者: sunbaofa 发布时间: 2011-06-03