Tenta o xargs...

Marcio Gil wrote:
>
> > -----Original Message-----
> > From: Fabiano Caixeta Duarte
> >
> > 2009/11/12 Marcio Gil <[email protected] 
> <mailto:marciomgil%40bol.com.br>>:
> > >> -----Original Message-----
> > >> From: Fabiano Caixeta Duarte
> > >>
> > >> Uma idéia a ser melhorada:
> > >>
> > >> TMP=$(mktemp /tmp/tmp.XXXXXX)
> > >> sort arquivo | uniq > $TMP
> > >> while [ $(wc -l < $TMP) -gt 0 ]; do
> > >> linha=$(grep -m1 -f b arquivo)
> > >
> > > O que faz esse b? Imagino que você queria dizer:
> > >
> > > linha=$(grep -m1 -f $TMP arquivo)
> > >
> > > Mas mesmo assim não funcionou:
> > >
> > > [mar...@localhost Cupom]$ grep "Bematech_FI_" !(*~*) | grep -v
> > > "DLLPROC\|DLLDEF\|LOAD_PROC" | sed
> > > 's/.*\(Bematech_FI_[A-Za-z0-9_]*\).*/\1/' | ~/tmp/teste.sh -
> > > "/tmp/tmp.jT3120"
> > >
> > >
> > > sed: -e expression #1, char 0: no previous regular expression
> > >
> > > sed: -e expression #1, char 0: no previous regular expression
> > >
> > > sed: -e expression #1, char 0: no previous regular expression
> > > ...
> > >
> > >> echo $linha
> > >> sed -i "/$linha/d" $TMP
> > >> done
> > >> rm $TMP
> > >>
> > >> Se ficar alguma dúvida, eu explico :)
> > >>
> > >
> > > Muito obrigado pelas idéias :-)
> >
> > Sim. Na pressa eu acabei não substituindo o 'b' por $TMP.
> >
> > Mas você disse que não funciona. Aqui eu estei com o que você
> passou
> > como modelo de seu arquivo.
> >
> > Eu não sei o resultado disto:
> > > [mar...@localhost Cupom]$ grep "Bematech_FI_" !(*~*) | grep -v
> > > "DLLPROC\|DLLDEF\|LOAD_PROC" | sed
> > > 's/.*\(Bematech_FI_[A-Za-z0-9_]*\).*/\1/' | ~/tmp/teste.sh -
> > > "/tmp/tmp.jT3120"
> >
> > Também não sei o conteúdo de teste.sh, que deve ser o fruto de uma
> > alteração do código que enviei. Meu código pede um arquivo chamado
> > "arquivo". Isto pode ser facilmente ajustado para receber dados da
> > stdin.
> >
> > Caso queira enviar um exemplo real dos seus dados, podemos ajustar
> o
> > código. Entretanto, a idéia do Aurélio e do Thobias lembrada pelo
> > Tiago é de longe melhor do que a minha.
> >
> > Abraços!
> >
>
> O resultado de
>
> $ grep "Bematech_FI_" !(*~*) | grep -v "DLLPROC\|DLLDEF\|LOAD_PROC"
> | sed
> 's/.*\(Bematech_FI_[A-Za-z0-9_]*\).*/\1/' >~/tmp/funclst.txt
>
> é isto: http://pastebin.com/mb88c416 <http://pastebin.com/mb88c416>
>
> E o conteúdo de teste.sh:
>
> #! /bin/bash
> TMP=$(mktemp /tmp/tmp.XXXXXX)
> sort $1 | uniq > $TMP
> while [ $(wc -l < $TMP) -gt 0 ]; do
> linha=$(grep -m1 -f $TMP $1)
> echo $linha
> sed -i "/$linha/d" $TMP
> done
> rm $TMP
>
> Não funciona se eu tentar utiliza-lo com o pipe (não lê se for da
> entrada padrão). Já se eu executar:
>
> $ time ./teste.sh funclst.txt
> ...
> real 0m6.600s
>
> Só para comparar:
>
> $ time awk '{ if (!visto[$0]) { print; visto[$0] = 1; } }'
> funclst.txt
> ...
> real 0m0.084s
>
> No entanto este script "teste.sh" não encontrou a função
> "Bematech_FI_LeituraXSerial", certamente porque antes existe a
> função "Bematech_FI_LeituraX".
>
> Seria interessante resolver esta outra questão: existe uma maneira
> de o script ser utilizado com o pipe?
>
> 



------------------------------------

---------------------------------------------------------------------
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: [email protected]
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em 
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil

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:
    [email protected]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html


Responder a