#!/usr/bin/perl # extract command line arguments @indivs = @ARGV; # remove command line arguments (so while(<>) works) foreach $argnum (0 .. $#ARGV) { $test=shift @ARGV; } # Header line 1, shows first person comparison printf "%-12s", "P1 vs. P2"; for($c1=0;$c1<(@indivs+0);$c1++) { printf "%3s", ""; } for($c1=0;$c1<(@indivs+0);$c1++) { printf "%3s", $indivs[$c1]; for($c2=0;$c2<(@indivs-1);$c2++) { if ($c2+1==$c1){ printf "%3s", "*"; } else{ printf "%3s", ""; } } } print "\n"; # Header line 2, shows second person comparison printf "%-12s", "marker"; for($c1=0;$c1<(@indivs+0);$c1++) { printf "%3s", $indivs[$c1]; } for($c1=0;$c1<(@indivs+0);$c1++) { for($c2=0;$c2<(@indivs+0);$c2++) { printf "%3s", $indivs[$c2]; } } print "\n"; while(<>){ ($marker, @genotypes) = split(/\s/,$_); printf "%-12s", $marker; ## number of genotypes #print "(".(@genotypes)." genotypes):"; %counts = ("AA/TT",0,"AC/TG",0,"AG/TC",0,"CC/GG",0,"--/--",0); for($c1=0;$c1<(@indivs+0);$c1++) { $gt = $genotypes[$indivs[$c1]]; if ($gt =~ /(aa|tt)/i){ printf "%3s", "aa"; } elsif ($gt =~ /(ac|ca|tg|gt)/i){ printf "%3s", "ac"; } elsif ($gt =~ /(ag|ga|tc|ct)/i){ printf "%3s", "ag"; } elsif ($gt =~ /(cc|gg)/i){ printf "%3s", "cc"; } elsif ($gt =~ /../) { printf "%3s", "--"; } else{ printf "%3s", "??"; } } for($c1=0;$c1<(@indivs+0);$c1++) { for($c2=0;$c2<(@indivs+0);$c2++) { $gt1 = $genotypes[$indivs[$c1]]; $gt2 = $genotypes[$indivs[$c2]]; if ($gt1 =~ /(aa|tt)/i && $gt2 =~ /(aa|tt)/i){ printf "%3s", "1"; } elsif ($gt1 =~ /(ac|ca|tg|gt)/i && $gt2 =~ /(ac|ca|tg|gt)/i){ printf "%3s", "1"; } elsif ($gt1 =~ /(ag|ga|tc|ct)/i && $gt2 =~ /(ag|ga|tc|ct)/i){ printf "%3s", "1"; } elsif ($gt1 =~ /(cc|gg)/i && $gt2 =~ /(cc|gg)/i){ printf "%3s", "1"; } # if genotypes are not similar, then don't consider similar else { printf "%3s", "0"; } } } print "\n"; }