Ola
vc quebra "fulano de tal" por que esta string contem 2 vezes o
caracter espaço em branco, que o shell reconhece como sendo um
separador de campo. uma alternativa seria vc "escapar" o espaço em
branco da sua string quando o awk imprime-a, colocando uma
contra-barra na frente. Outra seria vc imprimir entre aspas.
o seu script original funcionaria se vc informasse

#!/bin/sh
data=date
OLDIFS=$IFS
IFS=':'
cat $1 | awk -F: '{ OFS=":" ; print $2,$3,$4,$5,$6,$7 }' | while read ...

On 12/12/06, Vinicius Marques <[EMAIL PROTECTED]> wrote:
>
>
>
>
>
>
> Cara complementando eu nao entendi direito como esta fazendo para
> nao quebrar o "Fulano de tal" em outros campos...essa parte acho que esta
> me dando mais dor de cabeça.
> Abraço
> Vinicius Marques
>
>
> Vinicius Marques wrote:
> >
> > Meu caro Tiago,
> > Cara eu nao tenho muita experiência com shell script, por isso acabei
> > por nao conseguir desenrolar muita coisa do que escreveu ..será que tem
> > como esmiuçar um pouco mais?
> > Desde ja Grato
> > Vinicius Marques
> >
> > Tiago Barcellos Peczenyj wrote:
> > >
> > > Ola
> > >
> > > Validar este arquivo é facil, basta definir o 'numero' do campo e uma
> > > expressão regular.
> > >
> > > awk -F: 'function validate(valor,nome){
> > > if (valor !~ /[0-9A-Za-z]/) printf "Erro! Campo \"%s\" vazio na
> > > linha %d\n",nome,NR
> > > }
> > > {validate($3,"nome"); validate($4,"tel")}' dados
> > >
> > > Se o campo que vc informa não 'casar' com a expressão regular, um
> > > aviso sera emitido. vc pode personalizar a mensagem de erro.
> > >
> > > Agora, o seu outro problema de cortar o 'fulano de tal' é que vc manda
> > > do awk pro bash, e o separador de campos do BASH tem que ser setado
> > > também. Vc poderia fazer tudo em awk, inclusive.
> > >
> > > #!/usr/bin/gawk -f
> > > function insert(matr,nome,tel,tel1,tel2,mail,alias){
> > > cmd = "insert into dados (matr,nome,tel,tel1,tel2,mail,alias) values" ;
> > > return cmd
> > >
> > sprintf("('%s','%s','%s','%s','%s','%s')",matr,nome,tel,tel1,tel2,mail,alias);
> > > }
> > > BEGIN{ FS=":"; }
> > > {
> > > print insert($2,$3,$4,$5,$6,$7);
> > > }
> > >
> > > vc pode executar assim:
> > >
> > > $ ./arquivo.awk dados > insert.sql
> > >
> > > e ai mandar o mysql importar este arquivo.
> > >
> > > Veja se isso lhe ajuda.
> > >
> > > On 12/11/06, Vinicius Marques <[EMAIL PROTECTED]
> > <mailto:viniciusrt01%40pop.com.br>
> > > <mailto:viniciusrt01%40pop.com.br>> wrote:
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > Srs,
> > > > Não tenho muita experiencia em Shell script e estava quebrando a
> > cabeça
> > > > para fazer uma insercao num BD e estava com os seguintes problemas.
> > > >
> > > > Os campos do texto que quero inserir estao dispostos da seguinte
> > forma.
> > > >
> > > > :001:Fulano de tal:0xx21656565656: : : [EMAIL PROTECTED]
> > <mailto:fulano%40tal.net>
> > > <mailto:fulano%40tal.net>: fulano
> > > >
> > > > Porém como mostrado na linha alguns cadastros eu tenho campos vazios.
> > > > Nesse caso eu ja queri acrescentar
> > > > um "nao informado" na hora da insercao". Outro problema é qdo eu
> > rodo o
> > > > script abaixo ele me incrementa no banco só que assim no campo matr OK
> > > > tudo certo porem o nome "Fulano de tal" e distribuido nos outros
> > campos
> > > > nome=fulano, tel=de, tel1=tal..
> > > > Será que poderiam me dar uma luz sobre o assunto, ou material diretriz
> > > > qq força é bem vinda.
> > > > Abraço
> > > > Vinicius Marques
> > > >
> > > > #!/bin/sh
> > > > data=date
> > > > cat $1 | awk -F: '{ print $2 $3 $4 $5 $6 $7 }' | while read x y z
> > k a b
> > > > do
> > > > /usr/local/mysql/bin/mysql -u root -e "insert into dados
> > > > (matr,nome,tel,tel1,tel2,mail,alias) values
> > > > ('$x','$y','$z','$k','$a','$b')" Locate
> > > > #echo $x $y $z $k $a $b $c
> > > > done
> > > >
> > > > if [ "$?" = "1" ]
> > > > then
> > > > wall Erro na inclusao do Registro $count
> > > > echo "Erro na insercao de dados do dia $data no registro $count" >>
> > > > result_$data.log
> > > > fi
> > > > done
> > > >
> > > >
> > > > _______________________________________________________
> > > > Novidade no Yahoo! Mail: receba alertas de novas mensagens no seu
> > > celular. Registre seu aparelho agora!
> > > > http://br.mobile.yahoo.com/mailalertas/
> > <http://br.mobile.yahoo.com/mailalertas/>
> > > <http://br.mobile.yahoo.com/mailalertas/
> > <http://br.mobile.yahoo.com/mailalertas/>>
> > > >
> > > >
> > > >
> > >
> > > --
> > > Tiago B Peczenyj
> > > Linux User #405772
> > >
> > > # cd /pub
> > > # more beer
> > >
> > >
> >
> >
> >
> >
> >
> > _______________________________________________________
> > Você quer respostas para suas perguntas? Ou você sabe muito e quer
> > compartilhar seu conhecimento? Experimente o Yahoo! Respostas !
> > http://br.answers.yahoo.com/ <http://br.answers.yahoo.com/>
> >
> >
>
>
> _______________________________________________________
> Yahoo! Acesso Grátis - Internet rápida e grátis. Instale
> o discador agora!
> http://br.acesso.yahoo.com
>
>
> 



-- 
Tiago B Peczenyj
Linux User #405772

# cd /pub
# more beer

Responder a