Es muy sencillo, pero hay que tener en cuenta unos detalles:
- Suponemos que las fechas están en formato anglosajón (mes/dia/año hora:minuto:segundo AM/PM)
El archivo donde está el origen de los datos se llama archivo.txt
El archivo resultado estará en un fichero llamado resultado.txt
Las fechas y tiempos pueden tener ceros en las cifras menores de 9. Así, la una de la madrugada será las 01:00:00 y no las 1:0:0
Sólo hay que cambiar la fecha que hay al final de la línea.
Entonces el código (uno de los posibles) es este:
Código:
#!/usr/bin/perl
use DateTime;
use Time::ParseDate;
# Para todas las líneas del fichero que pasamos como argumento del programa
# La línea quedará almacena en la variable por defecto $_
while ( <ARGV> )
{
# Analizamos la línea y nos quedamos con la última parte
# que es la que parece que vero quería cambiar
($tiempo) = $_ =~ /,([^,]+)$/;
# Convertimos la fecha/hora en segundos desde el epoch
$segundos = parsedate($tiempo);
# Si ha fallado la conversión, esa línea es distinta de las demás.
# Informamos al operador y seguimos con la siguiente
unless ( defined $segundos )
{
print "ERROR: Linea distinta:\n$_\n";
next;
}
# Creamos un objeto Fecha/Hora para que nos ayude en la conversión
$dt = DateTime->from_epoch (
epoch=>$segundos,
time_zone=>"local"
);
# Creamos la nueva fecha, sin el AM/PM
$nueva = $dt->strftime("%m/%d/%Y") . ' ' . $dt->hms;
# Modificamos la línea con la nueva fecha
$_ =~ s/,[^,]+$/,$nueva/;
# Sacamos el resultado al exterior
print "$_\n";
}
Y lo ejecutaríamos como:
Código:
programa.pl archivo.txt > resultado.txt
Quedaría editar el fichero resultado y ver si existen líneas etiquetadas como ERROR, por si acaso.
El resultado del programa sería:
archivo.txt
Código:
38330500,29ba47bb104923102751880e62eeda9d,4/1/2004 1:24:49 AM,4/1/2004 1:24:49 AM
36314924,d9ab3bbc7ef7614b5965b121532161e6,4/1/2004 1:27:45 AM,4/1/2004 1:34:09 AM
36519536,91d10a59ee2971f98d21be0b9b872a97,4/1/2004 1:28:25 AM,4/1/2004 1:33:18 PM
resultado.txt
Código:
38330500,29ba47bb104923102751880e62eeda9d,4/1/2004 1:24:49 AM,04/01/2004 01:24:49
36314924,d9ab3bbc7ef7614b5965b121532161e6,4/1/2004 1:27:45 AM,04/01/2004 01:34:09
36519536,91d10a59ee2971f98d21be0b9b872a97,4/1/2004 1:28:25 AM,04/01/2004 13:33:18