[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] AWK para separar linhas e campos
From: |
Tiago Barcellos Peczenyj |
Subject: |
Re: [shell-script] AWK para separar linhas e campos |
Date: |
Sun, 11 Nov 2007 14:04:02 -0200 |
Awk pode ser interessante, mas o sed é mais indicado nesse ponto pois
é uma simples manipulação de texto :)
$ sed -r 's/^/\^/;s/\^([^:]+):([^^]+)/,
\1="\2"/g;s/^,/INSERT...(/;s/$/);/' arquivo
INSERT...( nome="Joao da Silva", sexo="Masculino", idade="48");
INSERT...( nome="Carlos", email="address@hidden", Observacoes="
hehehe::lala:");
Vejamos como eu cheguei ai:
$ sed -r 's/^/\^/' data.dat # coloco um ^ informando que começou um novo campo
^nome:Joao da Silva^sexo:Masculino^idade:48
^nome:Carlos^email:address@hidden^Observacoes: hehehe::lala:
$ sed -r 's/^/\^/;s/\^([^:]+):([^^]+)/@ \1->\2/g' data.dat # agora eu
separo as informações
@ nome->Joao da Silva@ sexo->Masculino@ idade->48
@ nome->Carlos@ email->address@hidden@ Observacoes-> hehehe::lala:
$ sed -r 's/^/\^/;s/\^([^:]+):([^^]+)/, \1="\2"/g' data.dat # ta certo
? então eu deixo parecido com o insert SQL
, nome="Joao da Silva", sexo="Masculino", idade="48"
, nome="Carlos", email="address@hidden", Observacoes=" hehehe::lala:"
$ sed -r 's/^/\^/;s/\^([^:]+):([^^]+)/, \1="\2"/g;s/^,/INSERT...(/;'
data.dat # colocamos o INSERT na frente
INSERT...( nome="Joao da Silva", sexo="Masculino", idade="48"
INSERT...( nome="Carlos", email="address@hidden", Observacoes=" hehehe::lala:"
Agora basta terminar as linhas ;-)
On Nov 9, 2007 7:32 PM, Marcelo Salhab Brogliato <address@hidden> wrote:
>
> Olá,
>
> tenho entradas do tipo:
> nome:Joao da Silva^sexo:Masculino^idade:48
> nome:Carlos^email:address@hidden^Observacoes: hehehe::lala:
>
> e assim vai...
> preciso montar SQL para inserir em um banco de dados...
> em cada linhas, tenho os campos separados por ^, e os campos sao assim:
> ([^:]+)(.*) ... $1 é campo, $2 é o valor...
>
> estou fazendo o seguinte:
>
> TMP=$IFS
> IFS=`echo " " | tr " " "\n"`
> for entry in $contacts;
> do
> echo $entry | awk 'BEGIN { FS="^" } { for (i=1; i<=NF; i++) { $i ~
> /([^:])(.*)/ { print $1, "::", $2 } } }'
> done
> IFS=$TMP
>
> mas nao consigo nada alem de mensagens de erro :)
>
> alguem tem alguma sugestao?
>
> abracos,
> Salhab
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
--
Tiago B Peczenyj
Linux User #405772
http://peczenyj.blogspot.com/
"what does not kill us makes us stronger"