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

[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"


reply via email to

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