shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] preservando separador de campo


From: Mauricio
Subject: Re: [shell-script] preservando separador de campo
Date: Mon, 31 Oct 2005 10:56:38 +0000
User-agent: Mozilla Thunderbird 1.0.7 (X11/20050923)

Oi...
Bom... a sintaxe do seu insert:

> INSERT INTO clima (cidade, temp_min, temp_max, prcp, data) VALUES ('São,
> Francisco', 43, 57 ,0.0, '1994-11-29');

parece típica do mysqldump, acertei?

Pois bem, acho que não precisamos de C para resolver a questão, e sim shell mesmo :-)

Vejo e uso dois caminhos distintos, dependendo da minha necessidade:

Sem vetores:

#!/bin/bash
#Script para tratar consultas mysql

#Armazene sua consulta mysql em algo como(exemplo):

CONSULTA=`mysql -h192.168.1.2 -uusuario -psenha -D database --skip-column-names -e "select cidade, temp_min,temp_max, prcp, data from clima where data='1994-11-29'"`

#Defina os campos com o cut, por exemplo (deve ser possível usar o awk, #mas eu ainda não conhećo o suficiente)

CIDADE=`echo "$CONSULTA" | cut -f1`
TEMPMIN=`echo "$CONSULTA" | cut -f2`

# e assim por diante... pelo que vi na lista, a partir daqui vc tira de #letra :-)

Com vetores:

#!/bin/bash
#Script para tratar consultas mysql

#Defina o separador padrão com um tab:
IFS='   '

#Armazene sua consulta mysql em vetor:

CONSULTA=(`mysql -h192.168.1.2 -uusuario -psenha -D database --skip-column-names -e "select cidade, temp_min,temp_max, prcp, data from clima where data='1994-11-29'"`)

#A partir daqui ficou fácil: as posićões 0 1 2 3 e 4 do vetor serão, #respectivamente, os campos cidade, temp_min, temp_max, prcp e data da #sua consulta:

CIDADE=`echo ${CONSULTA[0]}`
TEMPMIN=`echo ${CONSULTA[1]}`

#e assim por diante, se bem que acho desnecessário definir dar nome às
#posićões do vetor, a nào ser que você realmente tenha muitas, muitas
#colunas em sua tabela


Imagino que existam outras solućões e gostaria muito de que alguém que as conheća as poste por aqui!!!

Grande abráco a todos!!!

Maurício















Tiago Barcellos Peczenyj wrote:
Ta bom, eu vou contar...

eu queria transformar algo do tipo

INSERT INTO clima (cidade, temp_min, temp_max, prcp, data) VALUES ('São,
Francisco', 43, 57 ,0.0, '1994-11-29');

em uma linha do tipo:
'São, Francisco'; 43; 57; 0.0; '1994-11-29'

No caso eu iria consultar um outro arquivo que diria a posição de cada campo
no arquivo no meu csv , validar os dados e fazer um append. Estou tentando
ser compativel com a notação de insert basico, sem ter que inventar a minha
notação e sem ter que escrever um programa em C pra lidar com essa string.
Por que ? Tédio... o tempo ta pra chuva... enfim, por que não fazer um banco
de dados ? Hehe...

Estou pensando em fazer algo mais... complicado contando o numero de aspas e
tratanto caso a caso, mas vai ficar um parto pra entender quando eu estiver
sóbrio. Eu cheguei quase pertinho de conseguir (!) assim que estiver estável
eu mostro pra vcs.

Valeu a força ai...

2005/10/30, MrBiTs <address@hidden>:

> usar o OUTFILE nào é uma boa idéia, a nào ser que vc use uma base local


(o que não é nenhum caso aqui na empresa), simplesmente porque ele vai
salvar o outfile no diretório mysql (normalmente /var/lib/mysql) da
máquina remota. Eu cheguei em dois lugares distintos:
Ou usar o mysqldump e filtrar o resultado, ou usar o mysql com o
parâmetro "-e".

Sim... Você está correto.
Já estamos fugindo bastante do shell-script, mas acho que isso é algo
que interessa aos programadores que um dia vão precisar acessar uma base
MySQL, seja ela remota ou local. Quando você faz um SELECT OUTFILE, você
informa ao MySQL qual é o arquivo de saída ( que no caso eu informei
/tmp/saida.txt ). Esse arquivo será gravado no /tmp da máquina onde o
MySQL roda. Se não há acesso ao servidor, uma de suas soluções é uma
saída. O mysql -e inclusive dá a você um separador de campo |
interessante de ser usado. De qualquer maneira, algum trabalho sempre
terá que ser feito.


[As partes desta mensagem que não continham texto foram removidas]



---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio
aviso.
---------------------------------------------------------------------
Sair da lista: address@hidden
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------



*Yahoo! Grupos, um serviço oferecido por:*  PUBLICIDADE
<http://br.rd.yahoo.com/SIG=12frlf17v/M=365837.7000707.7924794.2369893/D=brclubs/S=2137111254:HM/Y=BR/EXP=1130705635/A=2950750/R=2/id=noscript/SIG=10tift5qr/*http://br.movies.yahoo.com/>
------------------------------
*Links do Yahoo! Grupos*

  - Para visitar o site do seu grupo na web, acesse:
  http://br.groups.yahoo.com/group/shell-script/
  - Para sair deste grupo, envie um e-mail para:
  address@hidden<address@hidden?subject=Unsubscribe>
  - O uso que você faz do Yahoo! Grupos está sujeito aos Termos do
  Serviço do Yahoo! <http://br.yahoo.com/info/utos.html>.





[As partes desta mensagem que não continham texto foram removidas]



---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como 
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
aviso.
---------------------------------------------------------------------
Sair da lista: address@hidden
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em 
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Links do Yahoo! Grupos








reply via email to

[Prev in Thread] Current Thread [Next in Thread]