Lentidão utilizando o While [RESOLVIDO]

1. Lentidão utilizando o While [RESOLVIDO]

Guilherme Mar Oly
golympio

(usa CentOS)

Enviado em 25/03/2015 - 11:29h

Bom dia pessoal.

Estou precisando criar um script que identifique os valores iguais de uma coluna entre dois arquivos (lista_falha.txt e lista_ok.txt) e após encontrar criar outro arquivo com uma coluna adicional com informações capturadas do segundo arquivo (lista_ok.txt). Ou seja para os valores iguais da segunda coluna será acrescentado em um novo arquivo o valor da primeira coluna do arquivo (lista_ok.txt).

Abaixo um script que está funcionando, porem está demorando mais de 24h para terminar com dois arquivos de 3000 linhas cada. Existe alguma forma que eu possa melhorar a performance desta ação?

Obrigado!!!!

##############################################
#!/bin/bash
#set -x
clear


cont=1
contok=1
falha=`lista_falha.txt | wc -l`
ok=`lista_ok.txt | wc -l`
data=`date`

while [ $cont -le $falha ] ; do

listafalha=`cat lista_falha.txt | head -$cont | tail -1 | awk '{print $1 $2}'`
listafalhabina=`cat lista_falha.txt | head -$cont | tail -1 | awk -F"|" '{print $2}'`


while [ $contok -le $ok ] ; do

listaok=`cat lista_ok.txt | head -$contok | tail -1 | awk '{print $1}'`
listaok1=`cat lista_ok.txt | head -$contok | tail -1 | awk -F"|" '{print $2}'`

if [ $listafalhabina = $listaok1 ] ; then

echo "$listaok""|""$listafalha" >> /export/temp/output_$arq_name.log 2>&1

fi

contok=`expr $contok + 1`

done

if [ "$listafalhabina" != "$listaok1" ] ; then

listaok=0
echo "$listaok""|""$listafalha" >> /export/temp/output_$arq_name.log 2>&1

fi

cont=`expr $cont + 1`
contok=1
done

##################


  


2. Re: Lentidão utilizando o While

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 25/03/2015 - 19:19h

Ficou um pouco confuso

pode colar um pedaço dos arquivos para ilustrar melhor.

E aproveitando ... para cada registro no lista_falha.txt pode haver mais de um no lista_ok.txt e vice versa?


3. Re: Lentidão utilizando o While

Guilherme Mar Oly
golympio

(usa CentOS)

Enviado em 25/03/2015 - 21:05h

Para melhor entendimento eu preciso acrescentar a coluna de quantidade de OK (qtd_ok) no arquivo de falha, para isso preciso que o script identifique cada numero que possui falha (2 coluna do arquivo lista_falha.txt) na lista de OK (2 coluna do arquivo lista_ok.txt) e grave a informação de qtd_ok+qtd_falha+numero+localidade em um novo arquivo (arquivo output...txt).
obs.: Caso o script não encontre o numero de falha na lista_ok.txt ele deve marcar como "0" a primeira coluna do arquivo gerado (arquivo "output...")
Obs.: Os números não se repetem na mesma lista.

Arquivo "lista_ok.txt"
qtd_ok|numero|localidade
45|11222999|loja234
10|21333456|loja256
6|23567112|loja256
1|45322567|loja236
120|11456223|loja334
65|67753344|loja562
3|45363254|loja126


Arquivo "lista_falha.txt"
qtd_falha|numero|localidade
12|11222999|loja234
11|21333456|loja256
3|23567112|loja256
111|45322567|loja236
20|11456223|loja334
3|67753344|loja562
2|69363254|loja128


Arquivo output... #valor de qtd_ok = 0 na primeira linha existe pq não encontrou este "numero" no arquivo de falha.
qtd_ok|qtd_falha|numero|localidade
0|2|69363254|loja128
1|111|45322567|loja236
6|3|23567112|loja256
120|20|11456223|loja334
65|3|67753344|loja562
10|11|21333456|loja256
45|12|11222999|loja234




4. Re: Lentidão utilizando o While [RESOLVIDO]

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 25/03/2015 - 22:06h

to meio com pressa, mas acho que isso já deve rodar mais rapido

#!/bin/bash
echo "qtd_ok|qtd_falha|numero|localidade" > output
cat lista_ok.txt lista_falha.txt | grep -v ^qtd | awk -F\| '{ print $2"|"$3 }' | sort | uniq | while read line
do
ok=$(grep $line lista_ok.txt | awk -F\| '{ print $1}')
falha=$(grep $line lista_falha.txt| awk -F\| '{ print $1}')
echo "${ok:-0}|${falha:-0}|$line" >> output
done




5. Re: Lentidão utilizando o While [RESOLVIDO]

Guilherme Mar Oly
golympio

(usa CentOS)

Enviado em 25/03/2015 - 23:59h


Funcionou perfeitamente, obrigado pelo apoio!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts