Aprendiendo Perl, el reto: historia popular
Javier Tiá
javier.tia en gmail.com
Dom Jul 8 17:28:46 PDT 2012
Hola,
Mi respuesta a este reto:
------------------------- 8< -------------------------
#!/usr/bin/env perl
use strict;
use warnings;
use File::Basename 'basename';
sub get_cmds_shell_history()
{
# Llama bash en modo interactivo para llamar el comando interno 'history'
my $get_cmds =
qq/$ENV{'SHELL'} -i -c "history -r; history"/
. q/ | awk '{for (i=2; i<NF; i++) printf $i " "; print $NF}'/;
chomp(my @cmds = qx# $get_cmds #);
my @cmds_separated;
for (@cmds)
{
m/\||\|\||&&/ ?
push @cmds_separated, # Considere contar
map { my ($cmd) = split; {$cmd} } # commands entre
split m/\||\|\||&&/, # |, || y &&
:
push @cmds_separated, (split / /,$_)[0];
}
return @cmds_separated ? @cmds_separated : undef;
}
my %cmds_grouped;
(m|/|) ? $cmds_grouped{ basename($_) }++ : $cmds_grouped{$_}++
for (get_cmds_shell_history);
# Popularidad ordenada en orden decreciente
# Formatea la salida con el conteo indentado
printf("% 8d %s\n", $cmds_grouped{$_}, $_)
for sort { $cmds_grouped{$b} <=> $cmds_grouped{$a} }
keys %cmds_grouped;
------------------------- 8< -------------------------
Saludos,
2012/7/6 Marcelo <marcelo.magallon en gmail.com>:
> Hola,
>
> brian volvió a publicar un reto en la serie. Todavía tengo pendiente
> una traducción de la respuesta del anterior, que resultó un poco
> larga.
>
> El original en Inglés está en http://www.learning-perl.com/?p=302
>
> ------------------------- 8< -------------------------
>
> Para el reto de junio, escriba un programa que lea la historia de
> comandos del shell y determine cuales son los que usted utiliza con
> más frecuencia.
>
> En bash, es posible asignar valores a HISTFILE y HISTFILESIZE para
> controlar el comportamiento de la historia. Para obtener los comandos
> a contar, puede leer el archivo correcto o hacer una llamada al
> comando "history". A partir de ahí usted tiene que decidir como
> partir cada línea a fin de determinar cuál es el comando. ¿Puede
> soportar comandos con paths relativos y absolutos de manera que no los
> cuente de forma separada?
>
> Esto fue un meme hace un tiempo, y me gustaría encontrar mi respuesta
> de entonces. Si usted la encuentra por favor hágamelo saber.
>
> ------------------------- >8 -------------------------
>
> Como siempre están invitados a poner sus respuestas en el artículo de
> brian o hacer sus preguntas y comentarios por acá.
>
> Saludos,
>
> Marcelo
> __
> Costarica-pm en pm.org
> http://mail.pm.org/mailman/listinfo/costarica-pm
--
Javier
Más información sobre la lista de distribución Costarica-pm