Bueno, con el siguiente programa,
Using perl Syntax Highlighting
#!/usr/bin/perl
use 5.010;
use strict;
use warnings;
use diagnostics;
use open ':locale'; # usamos las localizaciones del juego de caracteres del sistema
use File::Slurp;
use POSIX qw(setlocale LC_ALL strftime);
## Pasamos a trabajar en localización española
my $anterior_localizacion = setlocale(LC_ALL, "es_ES");
## Leemos el fichero
my @fichero = read_file('kk.txt');
## usuario que vamos encontrando
my $usuario;
## Para todas las líneas del fichero
for my $linea (@fichero) {
if ($linea =~ /^(\w.+?):/) {
$usuario = $1;
}
if ($linea =~ /lastupdate : (\d+)/) {
say "$usuario:" . strftime "%Ec", localtime $1;
}
}
Coloreado en 0.004 segundos, usando
GeSHi 1.0.8.4
sale
Using text Syntax Highlighting
usuario:sáb 17 nov 1973 00:59:04 CET
usuario 2 :mar 10 feb 2009 03:54:15 CET
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
La primera expresión regular captura un conjunto de caracteres (
.+) precedidos por un carácter alfanumérico (
\w) al principio de la línea (
^) y hasta el primer (
?) carácter '
:'. Todos los caracteres son capturados por los paréntesis de captura, y almacenados en $1, que luego guardaremos en $usuario.
La segunda expresión regular es más sencilla: capturamos todo número (
\d+) que siga al texto 'lastupdate : ' (atento a los espacios en blanco).
Lo mismo de antes, los paréntesis de captura guardarán el número en $1, que luego pasaremos desde segundos desde el EPOCH a segundos, minutos, horas, etc, con la ayuda de localtime(), que luego llevaremos todos esos valores a strftime(), que sacará la fecha "en cristiano".
La salida de strftime() depende de la localización que hayamos elegido, que lo hemos cambiado a
es_ES, una de las localizaciones que, suponemos, existe en el sistema operativo.
El formato
Ec depende también de la versión de strftime del sistema operativo. Si no funciona, tendremos que consultar la página de manual de strftime y crear una cadena de formato acorde a la salida que queramos.
Si, por casualidad, estamos en un sistema con localización ya en español, podemos obviar algunas cosas, por lo que el programa quedaría así:
Using perl Syntax Highlighting
#!/usr/bin/perl
use 5.010;
use strict;
use warnings;
use diagnostics;
use File::Slurp;
use POSIX qw(strftime);
## Leemos el fichero
my @fichero = read_file('kk.txt');
## usuario que vamos encontrando
my $usuario;
## Para todas las líneas del fichero
for my $linea (@fichero) {
if ($linea =~ /^(\w.+?):/) {
$usuario = $1;
}
if ($linea =~ /lastupdate : (\d+)/) {
say "$usuario:" . strftime "%Ec", localtime $1;
}
}
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
(no modificamos el 'open' porque suponemos que strftime() lo sacará según la localización del sistema).