[SP-pm] Melhor forma para...

Gabriel Andrade gabiruh at gmail.com
Mon Jul 15 16:56:49 PDT 2013


perl -wnE 'BEGIN {my %h} chomp; $h{$_}+=1 for grep {/[ACGT]/} split //; END { say qq($_ => $h{$_}) for sort keys %h}' nucleotideos.txt


On Jul 15, 2013, at 6:05 PM, Rafael Silveira <dev.silveira at yahoo.com> wrote:

> Boa noite mongers.
> 
> Graças a sugestão do nosso amigo Felipe Leprevost, entrei no roseland.info e comecei a brincar.
> 
> O primeiro problema foi contar o número de ocorrencias numa string.
> 
> Eis o código que eu utilizei.
> 
> #!/usr/bin/env perl
> 
> use strict;
> use warnings;
> 
> open IFILE, '<', '../../data/string/counting.txt' or die('File not found');
> 
> my @nucleotides = qw(0 0 0 0);
> 
> while (my $line = <IFILE>) {
>   chomp $line;
>   
>   $nucleotides[0] += ($line =~ tr/A/g/);
>   $nucleotides[1] += ($line =~ tr/C/g/);
>   $nucleotides[2] += ($line =~ tr/G/g/);
>   $nucleotides[3] += ($line =~ tr/T/g/);
> }
> close IFILE;
> 
> open OFILE, '>', '../../output/string/counting.txt' or die('Can\'t create file');
> print OFILE join(" ", @nucleotides);
> close OFILE;
> 
> O problema é que não estou satisfeito com o código na hora que eu somo o numero do ocorrencias nos indices da array:
> 
>   $nucleotides[0] += ($line =~ tr/A/g/);  $nucleotides[1] += ($line =~ tr/C/g/);  $nucleotides[2] += ($line =~ tr/G/g/);  $nucleotides[3] += ($line =~ tr/T/g/);
> Existe uma forma melhor para fazer isso em uma linha?
> []'s
> =begin disclaimer
>   Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
> SaoPaulo-pm mailing list: SaoPaulo-pm at pm.org
> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer



More information about the SaoPaulo-pm mailing list