[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Processar Arquivo linha por linha ... Versão 3
From: |
Tiago Barcellos Peczenyj |
Subject: |
Re: [shell-script] Processar Arquivo linha por linha ... Versão 3 |
Date: |
Thu, 27 Sep 2007 11:06:29 -0300 |
Caro $( whoami )
o seu script pode ser modificado para receber multiplos ids e escrever o
resultado linha a linha?
ex:
$ cat arquivo
id1|nome1|sobrenome1
id2|nome2|sobrenome2
id3|nome3|sobrenome3
$ cut -d\| -f1 arquivo
id1
id2
id3
se vc puder fazer
$ ./calcula id1 id2 id3
valor_calculado_para_id1
valor_calculado_para_id2
valor_calculado_para_id3
bastaria vc fazer
$ cut -d\| -f1 arquivo | xargs ./script
e ai, poderia fazer um paste:
$ paste -d \| <($ cut -d\| -f1 arquivo) <($ cut -d\| -f1 arquivo | xargs
./script) <(cut -d\| -f2- arquivo) > final
ou poderia recorrer ao awk
$ cut -d\| -f1 arquivo | xargs ./script > calculado
$ paste -d \| calculado arquivo | awk -F "|" -v OFS="|" '{print
$2,$1,$3,$4}'
Agora se o seu arquivo fizer
$ ./calcula id1 id2 id3
id1|valor_calculado_para_id1
id2|valor_calculado_para_id2
id3|valor_calculado_para_id3
perceba que fica muito mais simples o paste
$ paste -d \| <($ cut -d\| -f1 arquivo | xargs ./script) <(cut -d\| -f2-
arquivo) > final
ou
$ cut -d\| -f1 arquivo | xargs ./script > um
$ cut -d\| -f2- arquivo > dois
$ paste -d \| um dois > final # :)
Bom, e se o seu script não pode ser alterado?
$ cut -d\| -f1 arquivo | xargs -n 1 ./script
terá o mesmo efeito. Só que a performance sera bem mais baixa (pode sentir
com 7 mil linhas, mas podem ser só alguns minutos)
O ideal é que vc pudesse passar a linha toda para o seu script e ele se
'virasse' pra calcular :)
[]´s Tiago
On 9/27/07, isampbr <address@hidden> wrote:
>
> Olá pessoal !
>
> Sendo arquivo.txt com 7000 linhas no seguinte padrão:
> (id|nome|sobrenome)
>
> 123456|abcd|xyzt
>
> preciso gerar a seguinte saida:
>
> 123456|dso#ij83%9!87==|abcd|xyzt
>
> sendo que "dso#ij83%9!87==" é um calculo executado por outro script.
>
> estou tentando resolver com dicas que os colegas me passaram
> a algum tempo, mas o resultado não esta legal (aliás, sem resultados).
>
> a linha que estou tentando usar é:
>
> awk -F\| '{print $1"|" system("./calcula.sh",$1) "|"$2"|"$3}' arquivo.txt
>
> Onde estou errando ?
>
>
>
--
Tiago B Peczenyj
Linux User #405772
http://peczenyj.blogspot.com/
[As partes desta mensagem que não continham texto foram removidas]