2013-12-11 125 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