Ok, Vou tentar implementar o script do Flavio.
Quem me deras se todas as listas que participo tivesse metade da eficiência desta lista aqui. Muitíssimo obrigado a todos que responderam. Flavio Junior <[EMAIL PROTECTED]> escreveu: Sabia q eu já tinha feito isso... Procurei no historico da lista e encontrei: http://www.mail-archive.com/shell-script@yahoogrupos.com.br/msg03978.html É exatamente o que voce quer, so muda de ingles pra portugues.. O link pro script q escrevi direto é: http://pastebin.ca/179891 Espero que isso ajude, Flávio do Carmo Junior On 8/27/07, Tiago Barcellos Peczenyj <[EMAIL PROTECTED]> wrote: > > Ola, > > primeiro vamos transformar os 3 awk's em 1 > > awk '{ $1=gensub("^(\d+)/(\d+)","\\2/\\1",1,$1); > $8=gensub("http://([^/]+)/.*","\\1",1,$8); > print $1,$2,$4,$8 }' access.log | sort -u > > se bem que, com o FS correto, fica bem mais simples > > awk -F '[ /]' '{print $2"/"$1"/"$3,$4,$6,$13}' access.log | sort -u > 27/08/2007 11:49:43 192.168.0.126 rad.msn.com > 27/08/2007 11:49:44 192.168.0.126 rad.msn.com > 27/08/2007 11:56:22 192.168.0.126 www.orkut.com > 27/08/2007 12:00:22 192.168.0.126 rad.msn.com > 27/08/2007 12:07:00 192.168.0.126 sb.google.com > > A parte 'complexa' fica na analise dos horarios de entrada e saida de > cada usuario. > > O que eu poderia sugerir... > > Acredito que se os dados dos usuarios forem alterados para este formato: > > awk -F '[ :/]' '{t=mktime($5" "$4" "$3" "$6" "$7" "$8); print > t,$9,$2,$1}' users.log | sort -n > 1188222050 10.3.16.131 entrou JOAQUIM > 1188223681 10.3.16.131 saiu JOAQUIM > > awk -F '[ /:]' '{t=mktime($3" "$1" "$2" "$4" "$5" "$6); print > t,$8,$16}' access.log | sort -u > 1188226183 192.168.0.126 rad.msn.com > 1188226184 192.168.0.126 rad.msn.com > 1188226582 192.168.0.126 www.orkut.com > 1188226822 192.168.0.126 rad.msn.com > 1188227220 192.168.0.126 sb.google.com > > vou dar o caminho das pedras, até pq mais do que isso seria resolver o > problema inteiro: > > o que eu fiz foi usar a função mktime para calcular um numero inteiro, > um time stamp. > > preciso saber agora, para um dado ip, qual é o usuario que estava logado. > > vindo do users.log > timestamp_começo IP FULANO entrou > timestamp_fim IP FULANO saiu > > e no access.log > timestamp_x IP ... > > Eu encontro o fulado quando eu satisfaço esta condição > > IP (user.log) == IP (access.log) > AND timestamp_começo < timestamp_x > AND timestamp_x < timestamp_fim > > o grande problema é que eu não posso levar isto ao pe da letra, pelo > seguinte: se eu conectei com o mesmo IP uma semana antes e uma semana > depois, isso interfere na pesquisa. teria que fazer algo mais. este > tipo de problema acontece quando eu oriento os meus registros por > linha, quando na verdade eu tenho um registro multi-linha. > > eu fui claro? relendo pode ter ficado um pouco confuso... > > o correto seria eu ter um arquivo assim > > IP timestamp_começo timestamp_fim FULANO > > eu pensaria em separar os arquivos por IP, criar arquivos > > users_IP > > cujo conteudo seria > > timestamp_começo timestamp_fim FULANO > > $ awk -F '[ :/]' '{ > t=mktime($5" "$4" "$3" "$6" "$7" "$8); print t,$2,$1 > "users_"$9}' > users.log | sort -n > > $ cat users_10.3.16.131 > 1188222050 entrou JOAQUIM > 1188223681 saiu JOAQUIM > > $ awk '$2 ~ /entrou/{entrou[$3]=$1} > $2 ~/saiu/{print entrou[$3],$1,$3 > "new_"FILENAME}' users_* > > $ cat new_users_10.3.16.131 > 1188222050 1188223681 JOAQUIM > > agora é, dado o ip e o timestamp, vc abrir o arquivo new_users_IP e > procurar o intervalo correto. teras que usar o getline() em um while > > No livro "The AWK programming language" do Aho, Weinberger & > Kerninghan existe um capitulo sobre "Reports and Databases" -- o caso > de procurar dados em 2 arquivos seria um caso de um "Natural Join". > > Entretanto o problema neste caso está na forma como a informação foi > espalhada de uma forma não trivial, recomendo algumas horas ajudando > um bom AWK para chegar em um resultado satisfatório. > > Podem existir alternativas? Sim, devem haver ferramentas que, se > utilizadas corretamente, devem prover a mesma informação, porém não as > conheço com a profundidade adequada e, para mim, isso é uma tarefa > para o AWK ;-) > > On 8/27/07, Adriano Carneiro de Moura <[EMAIL > PROTECTED]<adrianodemoura%40yahoo.com.br>> > wrote: > > On 8/27/07, Adriano Carneiro de Moura <[EMAIL > > PROTECTED]<adrianodemoura%40yahoo.com.br>> > wrote: > > > > > > pessoal, > > > > > > estou usando um proxy transparente e preciso fazer um relatório de > usuário/ip/site, aconte que o nome dos usuários estão em outro log, > diferente do access.log, e preciso cruzar os dois logs. > > > > > > Para tirar a linha no access.log estou usando o seguinte comando. > > > > > > cat /var/log/squid/access.log | awk '{print $1,$2,$4,$8}' | awk -F"/" > '{print $1,$2,$3,$5}' | awk '{print $1,$2,$3,$4,$5,$7}' | sort -u > > > obtenho o seguinte resultado: > > > 27 08 2007 10:43:31 10.3.16.131 www.google.com.br > > > 27 08 2007 10:43:43 10.3.16.92 www.netveiculos.com.br > > > 27 08 2007 10:43:45 10.3.16.92 www.netveiculos.com.br > > > > > > Desta forma eu tenho data/Hora/Ip/Site > > > > > > eu preciso acrescentar mais uma coluna neste relatório, informando o > Usuario, para ficar assim: > > > JOAQUIM 27 08 2007 10:43:31 10.3.16.131 www.google.com.br > > > JOSE 27 08 2007 10:43:43 10.3.16.92 www.netveiculos.com.br > > > JOSE 27 08 2007 10:43:45 10.3.16.92 www.netveiculos.com.br > > > > > > o problema é que o nome do usuário está em outro log, deste jeito: > > > JOAQUIM entrou 27/08/2007 10:40:50 10.3.16.131 > > > JOAQUIM saiu 27/08/2007 11:08:01 10.3.16.131 > > > > > > Além de buscar o usuário em outro log, tenho que verificar o IP e data > de entrata/saída. > -- > Tiago B Peczenyj > Linux User #405772 > > http://peczenyj.blogspot.com/ > > [As partes desta mensagem que não continham texto foram removidas] Flickr agora em português. Você clica, todo mundo vê. Saiba mais. [As partes desta mensagem que não continham texto foram removidas]