computer:perl:seq_content
这是本文档旧的修订版!
获取序列内容seq_content.pl
序列格式
基因序列文件的格式有多种,目前碰到的有如下几种:
FASTA格式
>I_CSL_PS2507MT02 TTAAACTCAGCGGGTGGCCTCGCCCATCCTGGGGTCGCATTCCAAACGCCATCCATGGATTGACGCATGATTTTGG ATCTCCCAAAAAGTATGATCTTCTCTAAGGCATACGACACAATAACATAGGCCTTGATTTAATCCACCCCTTATTG TTCGCAGCCAACGAGATGATGACCTGCTCTTCAGCACACCGCGCCGAGGGGCACGAGGAGCCACTCTGCAC
这种格式文件的特点是有个“>”开头的注释行。
Seq格式
"Contig 1" (1,717) Contig Length: 717 bases Average Length/Sequence: 686 bases Total Sequence Length: 1372 bases Top Strand: 1 sequences Bottom Strand: 1 sequences Total: 2 sequences ^^ TTGGAAGTAAAAGTCGTAACAAGGTTTCCgTAGGTGAaCcTGCGGAaGGAtCATTGTCGAATCCTGCAATAGCAGAATGA CCCGCTAACACGTTAAAAATTTAGGCGAGCGTCGGGAGGCCTCGGTCTCCTGTTTGCGAATCCATGGTAGGTGGCCACTC CCGGGTGGCCACTGGCCTACAAAATCATTCGGGCGCGGTATGCGCCAAGGACCTTAAAATCGAATTGTACGTCCGTATCC CGTTAGCGGGCATCGGCGTCTTTCCAAAATACAACGACTCTCGACAACGGATATCTCGGCTCTCGCATCGATGAAGAACG TAGCGAAATGCGATACTTGGTGTGAATTGCAGAATCCCGTGAACCATCGAGTCTTTGAACGCAAGTTGCGCCCGAAGCCA CTTGGCTGAGGGCACGCCTGCCTGGGTGTCACGCATTGTATTGCCCACAAACCAGTCACACCTGAGAAGTTGTGCCGGTT TGGGGCGGAAATTGGCCTCCCGTACCTTGTCGTGCGGTTGGCGGAAAAATGAGTCTCCGGCGATGGACGTCGCGACATCG GTGGTTGTAAAAGACCCTCTTGTCTTGTCGCGTGAATCCTCGTCATCTTAGAGAGCTCCAGGACCCTTAGGCAGCACGTA CTCTGTGCGCTTCGACTGTGACCCCAGGTCAGGCGGGACtACCCGCTGAGTTTAAGCATATCAATAAGCGGAGGA
这种格式文件的特点是有一行“^^”。
有时“^^”还不止一个:
^^: 351,652 Contig 44 (1,652) Contig Length: 652 bases Average Length/Sequence: 652 bases Total Sequence Length: 1304 bases Top Strand: 1 sequences Bottom Strand: 1 sequences Total: 2 sequences ^^ TTGTCGAAACCTGCATAGCAGAACGACCCGTGAACATGTAACAACAATTGGGTGTCCTTGGTATCGGGCTCTTGTTCGAT TAATTGGATGCCTTGTCAATGTGCGTCTTTGGTCAGCCCTCTGGGTCCTAAGGACGTCACATTGGCGCAACAACAAACCC CCGGCACGGCATGTGCCAAGGAAAATTAAACTTAAGAAGGGCTTGTATCATGCTTCTCCGTTTACGGGGTTTGAATGAGA CGTAGCTTCTTTATAATCACAAACGACTCTCGGCAACGGATATCTCGGCTCACGCATCGATGAAGAACGTAGCAAAATGC GATACTTGGTGTGAATTGCAGAATCCCGTGAACCATCGAGTTTTTGAACGCAAGTTGCGCCCGAAGTCTTTCGGCCGAGG GCACGTCTGCCTGGGCGTCACACATCGCGTCGCCCCCACCACGCCTCCTCGATGAGGATGCTTGGATGTGGGCGGAGATT GGTCTCCCGTTCCTATGGTGCGGTTGGCTAAAACAGGAGTCCCCTTTGACGGATGCACGATTAGTGGTGGTTGACAAGAC CCTCTTATCAAGTTGTGCGTTCTAAGGAGCAAGGAATATCTCTTCAATGACCCCAATGTGTCGTCTTGTGACGATGCTTC GATCGCGACCCC
也有的干脆没有注释信息:
^^ GCTGCTATTGAAGCTCCATCTACAAATGGATAAGATTTCGATCTTTGTGTATACGAGTTTTTGAAAATAACGGAACAATG CCGATTCTCTTCCAAGAAGTTGGTATTGCTCCGTTATTTATTAGGTTTTTTCTTGAATTTTTTTATTTAGGTCCTTGTCC TTGTTTTACTTCAACAAAACAAAAAGTATTTTTATGGCTTTTGATTTAGTATCCTATTATTATTATGTGCTAATAATTAA ATTTCCCTTTAGTTATTTTGGCTTTACAGTCATATTATTGGTTTAGAGTCAATTTAATTAAAAAATTATGGAATTTTCTG CCGAATTAAGGTAAGATAAAAAAAGAATCATCAAAAAAGATGATCAATGGTAGGAATTGCACTCTTTTTTTTGGTAATTT TGTAGAGAGTAGGGGGCGGATGTAGCCAA
类GCG格式
姑且这么称呼,因为GCG格式不完全是这样的:
1 ggactctaga gatttacgag ctaaagttct agcgcatgaa agtcgaagta tatactttag
61 tcgatacaaa gtccgttttt tcgaagatcc actatgataa tgaaaaagat ttctacatat
121 ccgaccaaat cgatcaagaa tatcccaatc tgataaatcc gtccaaatgg gtttactaat
181 aggatgcccc gatccagtac aaaattgagc ttttgataag tatcctatga ggagagtagc
241 ggggactatg gtatcgaatt ttttcattcg agtatctatt agaaatgaat tctccagcat
301 ttgattcctt actaacaaag tactttttgg tacacttgaa aggtacccca taaaatcgaa
361 gcaagagttt gctaattggt ttatatggat tcttcgtggc tgagtccaaa aacagaaata
421 atattgccag aaattgataa ggtagcattt ccatttcttc ttcaaaaaaa aagtgccttt
481 tgatgcaaga attccctttc cttgatatcg aacataatgc ataagaggat ccataaagaa
541 ccatagggtt ttccgagaaa aaccagggta cattatccca aaatgttcca tcttcctaga
601 aaagtggatt cgttccagaa aagttccaga agatgctaat ggtaagcaag aagattgttt
661 acgaagaaac aacaaaaaaa attcatattc tgatacataa gagttatata ggaatcgaaa
721 tagtctttta ttttcttttt gaaaaagaaa aatggatttc attgaagtaa taaaactatt
781 ccaattcgaa tagtagttaa gaaagaatcg caataaatgc aaagatggaa catcttggat
841 acggtattga aggagttgaa ccaggatttc caaatggata ggatagggta aatcgtcgac
901 ctgcaggcat gc
Plain格式
这种格式很明确,就是序列数据本身,没有别的多余信息:
AGTGACTGCGGACGACATTGTCGAACCTGCCTAGCAGAATGACCCGCGAACTTTGTCTAATACTCTCGGGGAAGCAGAAG GTTGGTTTTTATGGCCTCCCTTTTGTTCCCTTTGTCGGGTGTGCTCGTGTTGCCCTTTGGGTGACACGCTCATTCCCCGG CCGAACAACGAACCCCGGCGCGAAACGCGTCAAGGAACTTGAACAAGAACGCAACATCCATGCCCCGTTTCTGGGTGCTC GTGGTGCTTGCTCTCTCATGAACAAAACGACTCTCGGCAACGGATATCTCGGCTCTCGCATCGATGAAGAACGTAGCGAA ATGCGATACTTGGTGTGAATTGCAGAATCCCGTGAACCATCGAGTTTTTGAA
程序功能
程序要做的,就是从这多种格式的文件中把其中的序列数据取出来(如同Plain格式那样),以便后续放入结构化的数据库中。
根据上述对文件格式的分析,代码依次如下判断:
- 如果文件中有一行以“>”打头,则认为是FASTA格式,序列数据从该行后读取;
- 如果文件中有“^^”行,则认为是Seq格式,序列数据从最后一个“^^”行后读取;
- 如果文件中有数字,则认为是类GCG格式,序列数据是去掉数字和其他多余字符后剩余的部分;
- 文件是Plain格式。
代码简述
先把文件内容全部读到变量里(文件都很小):
my @lines = <>;
FASTA格式判断:
my $flags = grep { /^>/ } @lines; if ($flags) { $seq_format = "FASTA"; for (my $i = 0; $i <= $#lines; $i++) { if ($lines[$i] =~ /^>/) { $begin_line = $i + 1; last; } }
变量$begin_line记录序列数据开始的行。
Seq格式判断:
} elsif ($flags = grep { /^\^\^/ } @lines) { $seq_format = "Seq"; for (my $i = 0, my $j = 0; $i <= $#lines; $i++) { if ($lines[$i] =~ /^\^\^/) { $j++; if ($j == $flags) { $begin_line = $i + 1; last; } } }
这里变量$flags记录了文件中存在“^^”行的个数。
类GCG格式判断:
} elsif ($flags = grep { /[0-9]/ } @lines) { $seq_format = "GCG-like";
其余都认为是Plain格式:
} else { $seq_format = "Plain"; }
读取序列数据,并去掉所有多余字符:
for (my $i = $begin_line; $i <= $#lines; $i++) { $seq_content .= $lines[$i]; } $seq_content =~ s/\r|\n|\s|-|~|[0-9]//g;
计算序列长度:
$seq_length = length($seq_content);
输出结果:
print "Format: $seq_format\n"; print "Length: $seq_length\n"; print "Content:\n"; print "\U$seq_content\n"; exit 0;
完毕。
computer/perl/seq_content.1409905412.txt.gz · 最后更改: (外部编辑)
