====== 获取序列内容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;
完毕。
{{tag>Perl}}