Mostrando las entradas con la etiqueta csv. Mostrar todas las entradas
Mostrando las entradas con la etiqueta csv. Mostrar todas las entradas

miércoles, 13 de mayo de 2020

Leer archivo csv por columnas en bash Linux con awk para crear insert sql y eliminar espacios

En ocasiones tenemos archivos en csv u otro formato que contienen datos en columnas separados por algún carácter especial y queremos leerlo y crear insert  de alguna tabla

Existen diferentes maneras de crear los script de sql, desde usar una hoja de calculo o bien un script. Está vez usaremos el bash de nuestro sistema operativo Linux/mac/Unix para solucionarlo con el comando awk

Supongamos que nuestro archivo es misdatos.txt con el siguiente contenido:

Juan|Díaz|juandiaz@sitiodeprueba.com|1989-10-02
Bruno|Díaz|brunodiaz@sitiodeprueba.com|2000-09-24
Pedro|Paramo|pedroparamo@sitiodeprueba.com|1970-12-01

Primero, cree un archivo desde la consola o su editor preferido (la extensión no importa) con el siguiente código:

#nano crearscript.pie

#!/bin/bash

cat misdatos.txt | awk '{$1=$1};1' |

awk  'BEGIN {FS="|"}

{
valores= "\""$1"\",\""$2"\",\""$3"\",\""$4"\""
}

{
print "insert into tabla01 (firtsname, lastname, email, fecha) values( "valores");";

}'



Funciona de la siguiente manera:
Obtenemos los datos de archivo de datos
cat misdatos.txt | 

Limpiamos caracteres al principio y al final de cada columna sin afectar los datos

awk '{$1=$1};1' |

Indicamos el caracter separador de datos en esta ocasión es el pipe (|)
awk  'BEGIN {FS="|"}

Colocamos los valores de las columnas en una variable para manejabilidad.
valores= "\""$1"\",\""$2"\",\""$3"\",\""$4"\"

Imprimimos la salida incrustando el valor de la variable con los valores

print "insert into tabla01 (firtsname, lastname, email, fecha) values( "valores");";

Una vez realizado el ajuste de la tabla e información con los datos correspondientes en el archivo, guardamos.

Cambiamos los permisos al archivo para ejecutar

#chmod 755 crearscript.pie

y ejecutamos

#./crearscript.pie

insert into tabla01 (firtsname, lastname, email, fecha) values( "Juan","Díaz","juandiaz@sitiodeprueba.com","1989-10-02");
insert into tabla01 (firtsname, lastname, email, fecha) values( "Bruno","Díaz","brunodiaz@sitiodeprueba.com","2000-09-24");
insert into tabla01 (firtsname, lastname, email, fecha) values( "Pedro","Paramo","pedroparamo@sitiodeprueba.com","1970-12-01");


Excelente y fácil.

Saludos