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

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

Re: [shell-script] Tempo de execução de um script


From: MrBiTS
Subject: Re: [shell-script] Tempo de execução de um script
Date: Fri, 26 Sep 2008 10:45:50 -0300
User-agent: Thunderbird 2.0.0.16 (Windows/20080708)

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

> Senhores, bom dia.
> 
> Tenho o seguinte script:
> 
> #!/bin/bash
> 
> log="${1}"
> 
> while read line ; do
>     date=$(echo "${line}" | awk '{print $1}' | cut -d'.' -f1 | perl
> -pe 's/\d+/localtime($&)/e')
>     date=$(date -d "${date}" +"%F %T")
>     duration=$(echo "${line}" | awk '{print $2}')
>     clientAddress=$(echo "${line}" | awk '{print $3}')
>     resultCode=$(echo "${line}" | awk '{print $4}')
>     bytes=$(echo "${line}" | awk '{print $5}')
>     requestMethod=$(echo "${line}" | awk '{print $6}')
>     url=$(echo "${line}" | awk '{print $7}' | awk -F'http://' '{print $2}')
>     rfc931=$(echo "${line}" | awk '{print $8}')
>     hierarchyCode=$(echo "${line}" | awk '{print $9}')
>     type=$(echo "${line}" | awk '{print $10}')
>     echo "insert into squidReport (code, date, duration,
> clientAddress, resultCode, bytes, requestMethod, url, rfc931,
> hierarchyCode, type) values ('', \"${date}\", ${duration},
> INET_ATON('${clientAddress}'), \"${resultCode}\", ${bytes},
> \"${requestMethod}\", \"${url}\", \"${rfc931}\", \"${hierarchyCode}\",
> \"${type}\");"
> done < "${log}"
> 
> 
> Eu sei que essa não é nem de longe a melhor forma de fazer isso, por
> isso quero a ajuda dos senhores para que eu possa ter o mesmo
> resultado desse script, só mais rápido.
> Coloquei esse script para executar em um arquivo de log do Squid (400
> MB, com 1656966 linhas), aí já viu né... passou a noite toda rodando e
> não terminou.
> 
> Tentei fazer direto no AWK, mas não tive sucesso. Parei no seguinte erro:
> awk: lin. de com.:2: (FILENAME=- FNR=7648) fatal: impossível abrir
> pipe `date -d'Wed Sep 24 07:42:04 2008' +'%F %T'' (Muitos arquivos
> abertos)
> 
> Abraços,

Imagino que a execução da cláusula INSERT que o seu script gera seja a sua 
maior demora, mas há outros pontos. O awk a cada variável
também está matando.

Como o FS dos arquivos do squid é o espaço, voce pode fazer assim:

while read DATE DURATION CLIENTADDR RESCODE BYTES REQMETH URL RFC HCODE TYPE ; 
do
        echo "Inserir código de tratamento somente das variáveis DATE e URL
done < ${log}

Nesse trecho você já economizou uma pilha de coisas.

O segundo ponto é você não fazer um INSERT a cada linha lida. Jogue as linhas 
tratadas para um outro arquivo e faça um LOAD BULK
DATA nele.


- --

Um abraço

.0. MrBiTs - address@hidden
..0 GnuPG  - 
http://keys.cardboard.net:11371/pks/lookup?op=get&search=0xAC37715A6DD1F186
000 http://www.mrbits.com.br


-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkjc544ACgkQrDdxWm3R8YbCYwCggI96lHOy4MaES1gebvzD6QoS
SlUAn3uoWSuxP3ilA+l6MjO1H7Mv+1eo
=dFbZ
-----END PGP SIGNATURE-----


reply via email to

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