[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
- Várias coisas ao mesmo tempo, (continued)
Re: [shell-script] preservando separador de campo, Tiago Barcellos Peczenyj, 2005/10/30
Re: [shell-script] preservando separador de campo, Emerson Domingues Souto, 2005/10/31
Re: [shell-script] preservando separador de campo, Rodrigo Monteiro, 2005/10/31