使用perl进行DNA分析的基本正则表达式和字符串操作
发布时间:2020-12-16 06:27:58 所属栏目:大数据 来源:网络整理
导读:我是perl的新手,我想做的是我认为对存储在rtf文件中的DNA序列进行一些基本的字符串操作. 基本上,我的文件读取(文件是FASTA格式): LM1AAGTCTGACGGAGCAACGCCGCGTGTATGAAGAAGGTTTTCGGATCGTAAAGTACTGTCCGTTAGAGAAGAACAAGGATAAGAGTAACTGCTTGTCCCTTGACGGTATCTAACC
我是perl的新手,我想做的是我认为对存储在rtf文件中的DNA序列进行一些基本的字符串操作.
基本上,我的文件读取(文件是FASTA格式): >LM1 AAGTCTGACGGAGCAACGCCGCGTGTATGAAGAAGGTTTTCGGATCGTAA AGTACTGTCCGTTAGAGAAGAACAAGGATAAGAGTAACTGCTTGTCCCTT GACGGTATCTAACCAGAAAGCCACGGCTAACTACGTGCCAGCAGCCGCGG TAATACGTAGGTGGCAAGCGTTGTCCGGATTTATTGGGCGTAAAGCGCGC GCAGGCGGTCTTTTAAGTCTGATGTGAAAGCCCCCGGCTTAACCGGGGAG GGTCATTGGAAACTGGAAGACTGGAGTGCAGAAGAGGAGAGTGGAATTCC ACGTGTAGCGGTGAAATGCGTAGATATGTGGAGGAACACCAGTGGCGAAG GCGACTCTCTGGTCTGTAACTGACGCTGAGGCGCGAAAGCGTGGGGAGCA AACAGGATTAGATACCCTGGTAGTCCACGCCGT 我想要做的是读入我的文件并打印标题(标题是> LM1)然后匹配以下DNA序列GTGCCAGCAGCCGC,然后打印前面的DNA序列. >LM1 AAGTCTGACGGAGCAACGCCGCGTGTATGAAGAAGGTTTTCGGATCGTAA AGTACTGTCCGTTAGAGAAGAACAAGGATAAGAGTAACTGCTTGTCCCTT GACGGTATCTAACCAGAAAGCCACGGCTAACTAC 我写了以下程序: #!/usr/bin/perl use strict; use warnings; open(FASTA,"<seq_V3_V6_130227.rtf") or die "The file could not be found.n"; while(<FASTA>) { chomp($_); if ($_ =~ m/^>/ ) { my $header = $_; print "$headern"; } my $dna = <FASTA>; if ($dna =~ /(.*?)GTGCCAGCAGCCGC/) { print "$dna"; } } close(FASTA); 问题是我的程序逐行读取文件,我收到的输出如下: >LM1 GACGGTATCTAACCAGAAAGCCACGGCTAACTAC 基本上我不知道如何将整个DNA序列分配到我的$dna变量,最终不知道如何避免逐行读取DNA序列.我也收到这个警告: 如果有人能给我一些帮助来编写更好的代码或指出我正确的方向,我将不胜感激. 解决方法
使用
pos function:
use strict; use warnings; my $dna = ""; my $seq = "GTGCCAGCAGCCGC"; while (<DATA>) { if (/^>/) { print; } else { if (/^[AGCT]/) { $dna .= $_; } } } if ($dna =~ /$seq/g) { print substr($dna,pos($dna) - length($seq)),"n"; } __DATA__ >LM1 AAGTCTGACGGAGCAACGCCGCGTGTATGAAGAAGGTTTTCGGATCGTAA AGTACTGTCCGTTAGAGAAGAACAAGGATAAGAGTAACTGCTTGTCCCTT GACGGTATCTAACCAGAAAGCCACGGCTAACTACGTGCCAGCAGCCGCGG TAATACGTAGGTGGCAAGCGTTGTCCGGATTTATTGGGCGTAAAGCGCGC GCAGGCGGTCTTTTAAGTCTGATGTGAAAGCCCCCGGCTTAACCGGGGAG GGTCATTGGAAACTGGAAGACTGGAGTGCAGAAGAGGAGAGTGGAATTCC ACGTGTAGCGGTGAAATGCGTAGATATGTGGAGGAACACCAGTGGCGAAG GCGACTCTCTGGTCTGTAACTGACGCTGAGGCGCGAAAGCGTGGGGAGCA AACAGGATTAGATACCCTGGTAGTCCACGCCGT 您可以处理包含多个条目的文件,如下所示: while (<DATA>) { if (/^>/) { if ($dna =~ /$seq/g) { print substr($dna,"n"; $dna = ""; } print; } elsif (/^[AGCT]/) { $dna .= $_; } } if ($dna && $dna =~ /$seq/g) { print substr($dna,"n"; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |