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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Problemas com performance de script shell


From: mrgraucio
Subject: Problemas com performance de script shell
Date: Mon, 14 Nov 2011 21:42:41 -0000
User-agent: eGroups-EW/0.82

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!



reply via email to

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