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
