2013-12-11 123 views
0

我有这样如何搭配使用PERL

pop A B C D E 
P1 T/T C/C C/C T/T C/C 
P2 A/A G/G C/C T/T C/C 
1 A/A G/G C/C T/T C/C 
2 A/A G/G C/C T/T C/C 
3 A/T A/C A/G A/T A/C 
4 T/A T/G T/C T/A T/G 
5 G/A G/T G/C G/A G/T 
6 C/A C/T C/G C/A C/T 
pop A B C D E 
P1 T/T C/C C/C T/T C/C 
P2 A/A G/G C/C T/T C/C 
1 A/A G/G C/C T/T C/C 
2 A/A G/G C/C T/T C/C 
3 A/T A/C A/G A/T A/C 
4 T/A T/G T/C T/A T/G 
5 G/A G/T G/C G/A G/T 
6 C/A C/T C/G C/A C/T 

我想要做我的数据

  1. 我想将所有A/AA的folowwing事情数据列和计算比例, T/TT,C/CC, G/GG,Z/Z--/--级其余的人物,如A/TG/TC/GT/CH

  2. 现在我想通过比较P1P2知道从AE状态,如果P1=P2则状态从AE是单或P1任何一个或P2包含Z/Z-/-然后从状态到AE其他单从状态到AE

  3. 我想在popP2在弹出的列匹配1 AE,如果1 poppop列匹配p2,它的地位是聚才,我想以其他方式给予1正因为如此,如果它是单声道我不想做任何事情。

  4. 现在我将计算# 1 S和# H

  5. 最后,我将计算%sim这个公式=((#1*2+#H)/((#1+#H)*2))*100

  6. 我要重复相同的步骤第二套父母P1P2

进出料会是这样

pop A B C D E A B C D E   
P1 POLY POLY MONO MONO MONO POLY POLY MONO MONO MONO #1's #H's %sim 
P2 A G C T C        
1 A G C T C 1 1 C T C 2 0 100 
2 A G C T C 1 1 C T C 2 0 100 
3 A G C - C H H H H H 0 5 100 
4 H H H H H H H H H H 0 5 50 
5 H H H H H H H H H H 0 5 50 
6 H H H H H H H H H H 0 5 50 
7 H H H H H H H H H H 0 5 50 

现在我成功了,直到第1步,但不知道如何进一步进行,这是我直到现在的代码

#!/usr/bin/perl -w 
use strict; 
open(FILE, "<input.txt") || die "File not found"; 
my @lines = <FILE>; 
my @newlines; 
foreach(@lines) { 
    $_ =~ s/AA/A/g; 
    $_ =~ s/TT/T/g; 
    $_ =~ s/GG/G/g; 
    $_ =~ s/CC/C/g; 
    $_ =~ s/AT/H/g; 
    $_ =~ s/AG/H/g; 
    $_ =~ s/AC/H/g; 
    $_ =~ s/TA/H/g; 
    $_ =~ s/TG/H/g; 
    $_ =~ s/TC/H/g; 
    $_ =~ s/GA/H/g; 
    $_ =~ s/GT/H/g; 
    $_ =~ s/GC/H/g; 
    $_ =~ s/CA/H/g; 
    $_ =~ s/CT/H/g; 
    $_ =~ s/CG/H/g; 
    $_ =~ s/ZZ/-/g; 

    push(@newlines,$_); 
} 
open(FILE, ">input1.txt") || die "File not found"; 
print FILE @newlines; 
close(FILE); 
+1

我没有生物学的想法,但可能它可以帮助你指出来的BioPerl。然后,也许不会,谁知道,但是我听说如果人们想方设法用大量的As,Ts,Gs和Cs来做有趣的事情,他们通常喜欢听到BioPerl的存在。 – DeVadder

回答

1

这会替换并创建前两行。我不明白说明书的其余部分(其中的7号线是从哪里来的?)

#!/usr/bin/perl 
use warnings; 
use strict; 
use feature qw{ say }; 

use Data::Dumper; 


*ARGV = *DATA{IO} unless @ARGV; 

my (@parents, @rows); 

sub { 
    my $header = <>; 
    push @parents, map [ split ' ', <> ], 1, 2; 
    push @rows, map [ split ' ', <> ], 1 .. 6; 
}->() for 1, 2; 

for (map @$_, @parents, @rows) { 
    s= ([ACTG])/\1 =$1=x; 
    s= ([-Z]) /\1 =-=x; 
    s= .  /. =H=x; 
} 

say join "\t", 'pop', ('A' .. 'E') x 2; 

print 'P1'; 
for my $parent (0, 1) { 
    print join "\t", q(), map { 
     my $p1 = $parents[ $parent * 2 ][$_]; 
     my $p2 = $parents[ 1 + $parent * 2 ][$_]; 
     ($p1 eq $p2 or '-' eq $p1 or '-' eq $p2) ? 'mono' : 'poly'; 
    } 1 .. 5; 
} 
print "\n"; 


__DATA__ 
pop A B C D E 
P1 T/T C/C C/C T/T C/C 
P2 A/A G/G C/C T/T C/C 
1 A/A G/G C/C T/T C/C 
2 A/A G/G C/C T/T C/C 
3 A/T A/C A/G A/T A/C 
4 T/A T/G T/C T/A T/G 
5 G/A G/T G/C G/A G/T 
6 C/A C/T C/G C/A C/T 
pop A B C D E 
P1 T/T C/C C/C T/T C/C 
P2 A/A G/G C/C T/T C/C 
1 A/A G/G C/C T/T C/C 
2 A/A G/G C/C T/T C/C 
3 A/T A/C A/G A/T A/C 
4 T/A T/G T/C T/A T/G 
5 G/A G/T G/C G/A G/T 
6 C/A C/T C/G C/A C/T 
+0

亲爱的Choroba,非常感谢您的回复,我很抱歉,第七行来自mistaque,它不是我的数据的一部分。我exceuted你的代码,我让我的输出就是这样,流行\t一个\t乙\tÇ\t d \tê\t一个\t乙\tÇ\t d \tË P1 \t聚\t聚\t单\t单\t单\t聚的一部分\t poly \t单声道\t单声道\t单声道 并且我没有在输出中获得百分比。一次感谢您的帮助 – user2134713