如何找到在两个或多个对齐的RNA序列中共存的位置(在Perl中)



我对perl语言很陌生,遇到了一个小问题,我希望能得到帮助。

我希望能够读取包含一组对齐RNA序列的文本文件,并打印出文本文件中写入的每一行。例如:

gccuucgggc
gacuucgguc
ggcuucggcc

然后我想找到所有这些后续序列中的协变位置。在上面的示例中,正面和背面的第二个字符在每个序列中都是同变的。我想找到变化的位置和哪条线并打印出来。

目前,我可以打印出文本文件中的每一行,如下所示:

open(RNAalign, $ARGV[0]) || "Can't open $ARGV[0]: $!n";
while ( <RNAalign> ) {
    $RNAseq .= $_;
}
print "$RNAseqn";
@RNAseq=split('n',$RNAseq);

不确定这是否是正确的方法,但我希望之后我能在这里得到一些帮助。提前感谢您的任何帮助。

也许以下内容会有所帮助:

use strict;
use warnings;
use Data::Dumper;
my ( %hash, $stringNum, @covariances );
while (<DATA>) {
    chomp;
    my $i = 0;
    $stringNum++;
    $hash{ $i++ }{ lc $_ } = 1 for split //;
}
for my $position ( sort { $a <=> $b } keys %hash ) {
    push @covariances, $position if values %{ $hash{$position} } == $stringNum;
}
print Dumper @covariances;
print "n", Dumper %hash;
__DATA__
gccuucgggc
gacuucgguc
ggcuucggcc

输出:

$VAR1 = [
          '1',
          '8'
        ];
$VAR1 = {
          '6' => {
                   'g' => 1
                 },
          '3' => {
                   'u' => 1
                 },
          '7' => {
                   'g' => 1
                 },
          '9' => {
                   'c' => 1
                 },
          '2' => {
                   'c' => 1
                 },
          '8' => {
                   'c' => 1,
                   'u' => 1,
                   'g' => 1
                 },
          '1' => {
                   'c' => 1,
                   'a' => 1,
                   'g' => 1
                 },
          '4' => {
                   'u' => 1
                 },
          '0' => {
                   'g' => 1
                 },
          '5' => {
                   'c' => 1
                 }
        };

该脚本构建哈希的哈希,其中键是字符串位置0 .. n,关联的值是对跟踪这些位置字符的哈希的引用。 如果给定位置的所有字符串中的字符不同,则与键关联的值数将等于字符串数,指示协方差。请注意,@covariances包含1, 8 . 哈希被转储,因此您可以看到数据结构。

该脚本跟踪字符串的数量,并将每个字符串split为其字符,k 将每个字符的键值(以 $i 为单位)递增。 for my $position ( ...段按数字顺序遍历键,如果每个字符串中有不同的字符(values %{ $hash{$position} } == $stringNum),则将键(字符串位置)push@covariances上。

希望这有帮助!

最新更新