2008/9/26 M. Rodrigo Monteiro <[EMAIL PROTECTED]> > 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, > > > M. Rodrigo Monteiro > [EMAIL PROTECTED] > "Free as in Freedom, not free as in free beer" > Linux User # 403730 >
Mister M, Faço duas sugestões: 1) O formato de saída pode ser um formato aceito pelo seu banco para importação ao invés de precisar gerar tantos inserts. 2) Dispense o perl na conversão de timestamp para data. Você pode usar somente o date para isto. Veja um exemplo: date -d @$(head -1 access.log | awk '{print $1}') +"%F %T" Poste aí as mudanças para que possamos continuar auxiliando. PS: Como nem todo mundo tem log do squid pra teste, poste umas cinco linhas também. Isto facilita a obtenção de mais colaboradores. -- Fabiano Caixeta Duarte Especialista em Redes de Computadores Linux User #195299 Ribeirão Preto - SP [As partes desta mensagem que não continham texto foram removidas]