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: M. Rodrigo Monteiro
Subject: Re: [shell-script] Tempo de execução de um script
Date: Fri, 26 Sep 2008 11:39:09 -0300

2008/9/26 MrBiTS <address@hidden>:
> -----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.

Não cheguei nem a fazer a inserção propriamente dita no banco (MySQL),
a demora está para gerar o código SQL (a execução desse script).

>
> 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.

Pensei nisso, mas o problema é que o segundo campo, por exemplo, são 6
caracteres, como no exemplo a baixo:

1222225211.713    441 192.168.10.10 TCP_DENIED/407 2770 GET
http://osce80-en.url.trendmicro.com/P/80/FBA73F59E6F7E78CCFF29DD8BDF46ECCA2D6249982AF56C1799A34A0751593730FCEF18BC0AC7B2D
- NONE/- text/html

Se eu fizer o while desse jeito, vai ter problema nesse campo, certo?

>
> 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.

Vou fazer isso depois que conseguir gerar o script em um tempo "satisfatório"...

>
> - --
>
> 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]