#!/usr/bin/perl use strict; use warnings; use Syntax::Construct qw{ // }; my ($startpos, $endpos, $count); my %occurrences; while () { if (/^\s+ ([0-9]+) \s+ ([0-9]+) \s*$/x) { ($startpos, $endpos) = ($1, $2); $count = 0; } elsif (/\s+ ([-actg]+) \s*$/x) { ++$count; my @nucleotides = split //, $1; for my $pos (0 .. $#nucleotides) { ++$occurrences{ $nucleotides[$pos] }[$startpos + $pos] unless '-' eq $nucleotides[$pos]; } } } for my $pos (1 .. $endpos) { print "$pos\t"; for my $nucleotide (sort keys %occurrences) { printf "%s\t%0.1f\t", uc $nucleotide, 100 * ($occurrences{$nucleotide}[$pos] // 0) / $count; } print "\n"; } __DATA__ CLUSTAL O(1.2.1) multiple sequence alignment 1 60 gnl|hbvcds|AB014370_PreC_P-A ------------------------------------------------------------ gnl|hbvcds|AB064314_PreC_P-A ------------------------------------------------------------ gnl|hbvcds|AB014384_C_P-C ------------------------------------------------------------ gnl|hbvcds|AB014385_C_P-C ------------------------------------------------------------ gnl|hbvcds|AB048701_PreS1_P-D atggggcagaatctttccaccagcaatcctctgggattctttcccgaccatcagttggat gnl|hbvcds|AB078031_PreS1_P-D atggggcagaatctttccaccagcaaccctctgggattctttcccgaccaccagttggat gnl|hbvcds|AB030513_S_P-A ------------------------------------------------------------ gnl|hbvcds|AB064314_S_P-A ------------------------------------------------------------ gnl|hbvcds|AB194947_PreS2_P-E ------------------------------------------------------------ gnl|hbvcds|AB194948_PreS2_P-E ------------------------------------------------------------ 61 120 gnl|hbvcds|AB014370_PreC_P-A tagagtctcctgagcattgctcacctcaccatactgcactcaggcaagccattctctgct gnl|hbvcds|AB064314_PreC_P-A tagagtctcctgagcattgctcacctcaccatacggcactcaggcaagccattctctgct gnl|hbvcds|AB014384_C_P-C tagagtctccggaacattgttcacctcaccatacagcactcaggcaagctattctgtgtt gnl|hbvcds|AB014385_C_P-C tagagtctccggaacattgttcacctcaccatacagcactcaggcaagctattctgtgtt gnl|hbvcds|AB048701_PreS1_P-D gggtttttcttgttgacaagaatcctcacaataccgcagagtctagactcgtggtggact gnl|hbvcds|AB078031_PreS1_P-D gggtttttcttgttgacaagaatcctcacaataccgcagagtctagactcgtggtggact gnl|hbvcds|AB030513_S_P-A gggtttttcttgttgacaagaatcctcacaataccgcagagtctagactcgtggtggact gnl|hbvcds|AB064314_S_P-A gggtttttcttgttgacaagaatcctcacaataccgcagagtctagactcgtggtggact gnl|hbvcds|AB194947_PreS2_P-E gggtttttcttgttgacaaaaatcctcacaataccgcagagtctagactcgtggtggact gnl|hbvcds|AB194948_PreS2_P-E gggtttttcttgttgacaaaaatcctcacaataccgcagagtctagactcgtggtggact * * ** * * ****** **** *** * * * *