Como bien deben saber Perl aunque siendo un lenguaje de propósito general, es especialmente bueno trabajando con manipulación de texto y archivos por lo que es un lenguaje de programación que los administradores de sistemas (sysadmin) aprecian mucho y con regularidad tienen que recurrir a el.
En las siguientes pocas lineas se realiza un proceso de lectura de un archivo.csv (texto plano delimitado por algún carácter) con los campos separado por «;» de ahí generamos una contraseña basada en MD5 a partir de uno de los campos del .csv , luego guardar estos valores incluyendo el nuevo campo que sera el hash MD5 del primer campo en un segundo archivo2.csv.
El trozo de código quedo en 19 lineas, pudiendo haber sido menos.
De modo que archivo1.csv tendría:
12547854;Lenin Hernandez;leninmhs
14523695;Linus Tordvalds;ltordvalds
15896547;Richard Stallman;rstallman
y el resultante archivo2.csv quedaria:
12547854;Lenin Hernandez;leninmhs;96b20fb1777447fabdea0e6490820aac
14523695;Linus Torvalds;ltorvalds;c8b016c43318b12d4c30e45a4f920e94
123456;Richard Stallman;rstallman;e10adc3949ba59abbe56e057f20f883e
[sourcecode language=»perl»]
#!/usr/bin/perl -w
use Digest::MD5 qw(md5_hex);
my ($i, $archivo_final);
open (ARCHIVO,’/home/lenin/pl/ultimo.csv’) || die "No se puede abrir el archivo\n";
while ($registro = <ARCHIVO>) { #lee linea por linea el archivo
chop($registro); # quitamos el salto de linea
@campo = split(";",$registro); #creamos arreglo de los valores separados por ;
$archivo_final = "$campo[0];$campo[1];$campo[2];".md5_hex($campo[0]);
open(ARCHIVO_FINAL,">> archivo2.csv") || die "No se puede abrir el archivo\n";
print ARCHIVO_FINAL $archivo_final."\n"; #Escribimos la linea que acabamos de armar en el archivo resultante
$i++;
}
close(ARCHIVO);
print "\n\t Operación realizada Exitosamente. Se armaron $i registros\n";
[/sourcecode]
Deberían guardar estas lineas en un archivo normalmente que termine en .pl y lo corren desde un terminal: $perl archivo.pl ó $./archivo.pl
En estas lineas usamos el modulo Digest::MD5 que nos genera el md5 a partir de la cédula que es primer campo.
Otro punto de interés es el uso de la función open, en la linea 6 y 13 usamos como nombres simbólicos «ARCHIVO» y «ARCHIVO_FINAL» respectivamente, el «>>» nos permite ir agregando cada linea al final del archivo que se va llenando en cada iteración del while. Siempre es recomendable acompañar la función open de un die puesto si no se puede leer o crear el archivo por la razón (permisos, ruta errónea, etc.. ) que sea la ejecución del programa sea abortada.
De esta practica les interesa lo general que es:
Extraer -> Procesar ó Transformar -> Guardar
Esta generalidad la podrán aplicar para tratar texto plano en migración de servicios y de datos, en lo particular he usado medianamente la misma lógica para migración de ldap y de bases de datos.
Estas lineas de código fueron probadas en un Debían GNU/Linux , debería funcionar sin problemas en CanaimaGNULinux, Ubuntu o Mint.