Mostrando las entradas con la etiqueta linux. Mostrar todas las entradas
Mostrando las entradas con la etiqueta linux. 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

jueves, 25 de octubre de 2018

Acceder a mysql con root y también cambiar contraseña.

Si por alguna razón deseas acceder como el usuario de root a las bases de datos debemos cambiar algunos datos de la tabla mysql.

Aplicado en mysql 5

1. Entramos a mysql 

$ sudo mysql -u root mysql

2. Revisamos la tabla user

mysql> select * from user;

3. Cambiamos el valor del plugin de auth_socket a mysql_native_password del usuario root

mysql> UPDATE user SET plugin="mysql_native_password" WHERE User='root';

4. Aplicamos los cambios

mysql> flush privileges;

5. Salimos de la conexión actual 

mysql>quit

6. Ahora ingresamos normalmente

$mysql -u root mysql
enter password:

7. Si todo sale correcto habrás ingresado 

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version:  ******************** (Ubuntu)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>



Adicional: cambiar contraseña

8. Dentro de la conexión  lanzamos la siguiente consulta

mysql> UPDATE user SET authentication_string=PASSWORD("nuevaclave") WHERE User='root';

9. Aplicamos los cambios

mysql> flush privileges;

10. Salimos de la conexión actual 

mysql>quit

11. Reiniciamos el servicio

sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start 

12. Probamos con el nuevo password

Todo debe salir perfecto.