[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Re: Problemas com performance de script shell
From: |
Rodrigo Boechat |
Subject: |
Re: [shell-script] Re: Problemas com performance de script shell |
Date: |
Mon, 14 Nov 2011 21:35:03 -0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:7.0.1) Gecko/20111001 Thunderbird/7.0.1 |
Até onde compreendi, eu faria as seguintes alterações:
Na linha:
grep -B 1 '^3' "/home/$USER/teste" | sed 's/ //g' | sed '/--/d' | sed -e
"N;s/\n$3/3/g"
Eu faria:
grep -B 1 '^3' "/home/$USER/teste" | sed -e "s/ //g" -e "/--/d" -e
"N;s/\n$3/3/g"
Evita muitos Pipes e dará no mesmo resultado.
OBS: Eu uso o Bash. As partes que você chama as subshell's não
funcionaram aqui pelo fato da variável $a não estar definida na
subshell. Isso foi tranquilo de contornar.
Justamente falando de subshell's, vi que você executa uma quantidade
enorme de subshell's com esse laço for.
Por exemplo:
O que você faz com uma subshell nessa linha:
var1=$(cut -c2-10 <<<$a)
Você poderia fazer:
var1=${a:1:9}
Assim, evitaria uma subshell.
O mesmo pode ser feito para a var2, var3, ... varN.
Bom. Sinceramente eu não entendi o que você quis fazer com essa linha:
if [ $(cut -c26-31) -eq 109 ]; then
E também, de acordo com o exemplo que você me deu, a parte:
sed '/--/d'
Esculhambou a saída do comando completo quando eu inseri "--" em
qualquer linha.
Coloque em qualquer linha o "--" no exemplo que você passou e execute o
comando:
grep -B 1 '^3' "/home/$USER/teste" | sed 's/ //g' | sed '/--/d' | sed -e
"N;s/\n$3/3/g"
Acho que o resultado não é o esperado.
Trocando o sed '/--/d' de posição, para depois do sed -e "N;s/\n$3/3/g"
o problema foi evitado.
Imaginando que você não queira trabalhar com linhas que possuam o "--"...
Espero ter ajudado.
:)
Rodrigo Boechat
Em 14-11-2011 20:24, mrgraucio escreveu:
>
> Opa Rodrigo, valeu!
>
> 2001201110313947J555555400362682011103115254000000000000051014000100010100100000
> 300198513700000510140000001425096004889043517
> 2001201110313947J555555600402682011103115324200000000000017569000100010100100000
> 334196513700000175691092251759522938018963000
> 2001201110313947J545555200432682011103115345600000000000020222000100010100100000
> 334193513700000202221092251759452938018963000
> 2001201110313947J555555500412682011103115332000000000000022981000100010100100000
> 334191513700000229811092251759782938018963000
> 2001201110313947J554565500422682011103115340200000000000015210000100010100100000
> 334199513700000152101092251759602938018963000
>
> --- Em address@hidden
> <mailto:shell-script%40yahoogrupos.com.br>, Rodrigo Boechat
> <rodrigo.boechat.tenorio@...> escreveu
> >
> > Por favor, mande um exemplo com valores fictícios do arquivo de entrada.
> > Três conjuntos de linhas "2" e "3" seria suficiente.
> >
> > Rodrigo Boechat
> >
> > Em 14-11-2011 19:42, mrgraucio escreveu:
> > >
> > > Boa noite galera!
> > >
> > > Estou com um problema na leitura de arquivos, classificação desses
> > > dados e armazenamento em banco de dados. Tenho um arquivo que tem em
> > > torno de 4 mb com informações sobre a produção de uma determinada
> > > empresa. Nele tenho linhas que iniciam com o número 2 e
> complementadas
> > > com linhas iniciadas pelo número 3. Basicamente transformo as linhas
> > > iniciadas por 2 e 3 em uma só. A linha iniciada por 2 tem sempre 80
> > > caracteres, a iniciada por 3 varia de acordo com o tipo do produto em
> > > questão. Faço a separação por serviços de acordo com o número de
> > > caracteres da linha. Ex.:
> > >
> > > for a in $(grep -B 1 '^3' $ARQ | sed 's/ //g' | sed '/--/d' | sed -e
> > > "N;s/\n$3/3/g"); do /* FAÇO A LINHA COMPLEMENTAR, DE INICIO 3, VOLTAR
> > > UMA LINHA ACIMA, AO FINAL DA LINHA DE INÍCIO 2. ESSE CARA DEMORA BEM
> > > POUCO */
> > >
> > > if [ $(wc -c <<<$a) -eq <num de caracteres> ]; then /* CLASSIFICAÇÃO
> > > DE ACORDO COM NUMERO DE CARACTERES */
> > >
> > > if [ $(cut -c26-31) -eq 109 ]; then /* ESSES CARACTERES ME DÃO O
> > > CÓDIGO DO PRODUTO, CASO ALGUMA LINHA TENHA O MESMO NÚMERO DE
> > > CARACTERES MAS NÃO SEJA O MESMO PRODUTO */
> > > var1=$(cut -c2-10 <<<$a)
> > > var2=$(cut -c11-15 <<<$a)
> > > varn=$(cut -cnn-nn <<<$a)
> > > fi
> > >
> > > fi
> > >
> > > done
> > >
> > > Porém está demorando em torno de 25 minutos para terminar a
> > > classificação dos dados.
> > >
> > > Há alguma forma de eu conseguir executar vários loops de uma só vez,
> > > fazendo algum fork ou algo do gênero? Procurei em vários lugares
> > > também a respeito de como fazer multi-processamento dessas tarefas
> > > para melhorar a distribuição das tarefas entre threads do CPU
> > > (Core2Quad) mas também cheguei no fim da linha e não consegui nada!
> > >
> > > O arquivo é executado a partir de uma tmpfs, acreditei ser melhor
> para
> > > ter maior velocidade de leitura.
> > >
> > > Alguém tem uma luz de como deixar este processo mais rápido?
> > >
> > > Grato e muito obrigado!
> > >
> > >
> >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
>
>
[As partes desta mensagem que não continham texto foram removidas]
- Problemas com performance de script shell, mrgraucio, 2011/11/14
- Re: [shell-script] Problemas com performance de script shell, Rodrigo Boechat, 2011/11/14
- Re: Problemas com performance de script shell, mrgraucio, 2011/11/14
- Re: [shell-script] Re: Problemas com performance de script shell,
Rodrigo Boechat <=
- Re: Problemas com performance de script shell, mrgraucio, 2011/11/14
- Re: Problemas com performance de script shell, mrgraucio, 2011/11/14
- Re: [shell-script] Re: Problemas com performance de script shell, Rodrigo Boechat, 2011/11/15
- Re: Problemas com performance de script shell, mrgraucio, 2011/11/16
- Re: [shell-script] Re: Problemas com performance de script shell, Rodrigo Boechat, 2011/11/16
- Re: [shell-script] Re: Problemas com performance de script shell, Julio C. Neves, 2011/11/16
- Re: Problemas com performance de script shell, mrgraucio, 2011/11/16
- Re: Problemas com performance de script shell, mrgraucio, 2011/11/16
- Re: [shell-script] Re: Problemas com performance de script shell, Julio C. Neves, 2011/11/16
- Re: Problemas com performance de script shell, mrgraucio, 2011/11/16