Shell Script nosso de cada dia - Episódio 3

Aprenda a facilitar a sua vida na hora de administrar um sistema GNU/Linux com exemplos práticos.

[ Hits: 12.743 ]

Por: Wagner Souza em 31/07/2015 | Blog: https://medium.com/@souzaw


Garimpando os dados



Sabendo dos detalhes do que contém cada tabela e do arquivo de texto, utilizando as ferramentas do Shell, devemos separar as informações que queres em outros arquivos de texto e depois fazer a junção de tudo gerando o código necessário dos inserts e agregando ao arquivo SQL.

Vamos começar criando a tabela Autores onde precisamos criar um ID e pegar os nomes necessários.

Primeiro vou criar um arquivo chamado números, que armazenará todos os IDs usados tanto nas tabelas Autores como Editoras.

Criando uma variável global para guardar o total de registros:

TOTAL=$(cut -d':' -f3 lista_livros.txt | wc -l)

Em seguida, gero o arquivo números com o comando seq aproveitando a variável $TOTAL:

seq $TOTAL >> numeros

Agora é a vez de criar o arquivo autores. O campo três contém o nome do autor:

cut -d':' -f3 lista_livros.txt >> autores

Pronto! Vou concatenar esses dois arquivos gerando o novo arquivo autores:

paste -d':' numeros autores >> newautores

mv newautores autores

Feito! Já estamos quase lá. Agora é agora de acrescentar os inserts ao arquivo db_livros.sql. Para isso, criei o script insert.sh:

#!/bin/bash
#
# $1 = arquivo com os dados já formatados
#

  IFS=:

  while read  id nome;do
        echo
        echo "INSERT INTO tbl_AUTORES VALUES('$id', '$nome');" >> db_livros.sql
  done < $1

Este script vai ler o conteúdo do arquivo passado na variável $i e vai criar o código de insert dentro do arquivo db_livros.sql.

Execute o arquivo dessa forma:

./insert.sh autores

Confira o arquivo db_livros e veja no final deste os códigos gerados.

Usando as técnicas anteriores, criaremos o arquivo editoras:

cut -d':' -f5 lista_livros.txt >> editoras
$ paste -d':' numeros editoras >> neweditoras
$ mv neweditoras editoras


Altere o arquivo insert.sh afim de atender a criação dos códigos que irão popular a tabela editoras. Veja como ficou o script:

#!/bin/bash
#
# $1 = arquivo com os dados já formatados
#

  IFS=:

  while read  id nome;do
        echo
        echo
        echo "INSERT INTO tbl_EDITORAS VALUES('$id', '$nome');" >> db_livros.sql
  done < $1

A mudança foi apenas no nome da tabela onde ocorrerá os inserts.

./insert.sh editoras

Este artigo não tem como finalidade abordar a linguagem SQL afundo, mas quero salientar que a próxima e última tabela livros possui dados relacionados com as tabelas anteriores. Sendo assim, caso tivéssemos começado a criação dos códigos por ela, após a importação, iria gerar erros de relacionamento.

Vamos repetir os mesmo passos para a criação dos códigos para a tabela livros que conterá mais campos.

cut -d':' -f2,1,8,10 lista_livros.txt >> livros

No comando paste, vou inverter a ordem dos arquivos para casar certinho com os campos ID_AUTOR e ID_EDITORAS da tabela livros. Dessa forma, os comandos serão executados duas vezes cada:

paste -d':' livros numeros >> newlivros
$ mv newlivros livros


Repita novamente os comandos acima

paste -d':' livros numeros >> newlivros
$ mv newlivros livros


Edite o arquivo insert.sh de deixe dessa forma:

#!/bin/bash
#
# $1 = arquivo com os dados já formatados
#

  IFS=:

  while read isbn nome ano preco autor editora ;do
        echo
        echo
        echo "INSERT INTO tbl_LIVRO (ISBN, NOME, ANO, PRECO, ID_AUTOR, ID_EDITORA) VALUES('$isbn', '$nome', '$ano', '$preco', $autor, $editora);" >> db_livros.sql
  done < $1

Talvez você não tenha percebido, mas quando executamos o comando cut, ele não nos retornou os valores na ordem que pedimos, ou seja, ele trouxe primeiro o ISBN e depois o nome. Dessa forma, fiz as devidas alterações no comando INSERT do nosso arquivo insert.sh. Eu informei a ordem correta dos campos para que não haja erro na hora da importação.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Garimpando os dados
   3. Finalizando
Outros artigos deste autor

Teste de Intrusão com Metasploit

Exploração de Falhas em Servidores FTP

Resetando senha de usuário root em sistemas Debian e Red Hat

Atualização das provas LPIC-1, 304 e Essentials

Elastic SIEM - Instalação e Configuração do LAB (Parte I)

Leitura recomendada

Processamento Paralelo em Shell Script - Conversão de Arquivos WAV para MP3

Script GitPratico para criar repositórios remotos sem logar no GitHub

Receba seu IP externo via e-mail ou ensine o bash a ler e enviar e-mails

pam_mount e CiD - Gerenciamento centralizado dos mapeamentos de unidades de rede no Ubuntu

Criando Autoridades Certificadores e Certificados de Testes no Linux

  
Comentários
[1] Comentário enviado por hellnux em 31/07/2015 - 15:09h

Bela contribuição =D

[2] Comentário enviado por wagnerfs em 31/07/2015 - 21:27h


[1] Comentário enviado por hellnux em 31/07/2015 - 15:09h

Bela contribuição =D


Obrigado! Aguarde que em breve tem mais novidades.

[3] Comentário enviado por tonyhts em 02/08/2015 - 19:10h

Parabéns Mestre!!!
Excelente.
---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---

[4] Comentário enviado por wagnerfs em 03/08/2015 - 22:15h


[3] Comentário enviado por tonyhts em 02/08/2015 - 19:10h

Parabéns Mestre!!!
Excelente.
---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---

Obrigado!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts