Go Back   O UNIX e Linux Forum > Top Fóruns > Programação Shell Script e
.
site google



Programação Shell Script e Post perguntas sobre ksh, CSH, SH, BASH, Perl, PHP, SED, Awk e outros scripts shell e shell scripts línguas aqui.

Closed Thread
English Japanese Spanish French German Portuguese Italian Powered by Powered by Google
 
Thread Tools Pesquisar este Thread Rate Thread Display Modes
  #1 (permalink)  
Old 05-22-2009
Usuário
 

Join Date: May 2009
Lugares: 14
Awk - Comparar e incremento campos variáveis

Oi,

O meu primeiro post para este grupo ...

Tenho uma necessidade de a analisar um arquivo fonte que é uma captação de um analisador de rede.

Tenho dois campos que devem ser verificados:
- Campo 7 representa o pacote de comprimento (um inteiro), e
Campo 4 representa um endereço de rede (por exemplo, 192.168.25.3)

- A primeira verificação é encontrar 2 linhas consecutivas que têm o mesmo inteiro no campo 7 ou seja, o mesmo comprimento. Arquivo original não pode ter sempre estas linhas consecutivas embora, mas estou ok para ignorar essas linhas se é muito difícil incluir aquelas.
- Então, uma vez que temos essas duas linhas, verificar o texto no campo 4 para estas linhas e inidicate o valor dentro do texto que é "primeira" e de incremento de uma variável.

What I'm depois é compreender a forma como muitas vezes Um endereço é comparado ao primeiro endereço B.


Minha espera saída a partir da amostra abaixo seria:

"239.25.30.25 é a primeira vez" e "239.25.30.26 é o primeiro duas vezes.

Mesmo um produto como "239.25.30.25 - 1, 239.25.30.26 - 2" seria ótimo.


Exemplo fonte:


No. Time Source Destination Protocol Info Comprimento
1 20:44:19.525910000 192.168.30.25 239.25.30.25 porta UDP Fonte: DNP Destination port: 20000 94
2 20:44:19.525932000 192.168.30.26 239.25.30.26 porta UDP Fonte: DNP Destination port: 20000 94
3 20:44:19.525989000 192.168.30.26 239.25.30.26 porta UDP Fonte: DNP Destination port: 20000 114
4 20:44:19.526037000 192.168.30.25 239.25.30.25 porta UDP Fonte: DNP Destination port: 20000 114
13 20:44:19.693262000 192.168.30.26 239.25.30.26 porta UDP Fonte: DNP Destination port: 20000 193
14 20:44:19.693295000 192.168.30.25 239.25.30.25 porta UDP Fonte: DNP Destination port: 20000 193



Creio Awk deve ser capaz de tomar a isto, mas a minha awk habilidades não são bons o suficiente para chegar a alguma coisa decente.


Espero que alguém pode ser capaz de me aponte na direcção certa.

Obrigado,
Mario
Links Patrocinados
  #2 (permalink)  
Old 05-22-2009
Usuário
 

Join Date: May 2009
Lugares: 55

Código:
awk '
    $1 ~ /^[0-9]/ {
        if (!last) { last=$12; ip=$4 }
        else
        {
            if (last==$12) ipc[ip]++
            last=0
        }
    }

    END { for (ip in ipc) print ip, ipc[ip] }
' inputfile

produz o seguinte resultado a partir do seu arquivo exemplo:
239.25.30.25 1
239.25.30.26 2
  #3 (permalink)  
Old 05-22-2009
PANYAM panyam is offline Forum Advisor  
Usuário
 

Join Date: Sep 2008
Posts: 496
somethng como este que você pode tentar


Código:
awk 'BEGIN { prev=0 ; count=1 } { if ( prev==$NF) count++;else { count=1;;prev=$NF } print $4,"-", $12 "- " count}'  File.txt

THT esperança é a última coluna ordenadas
  #4 (permalink)  
Old 05-22-2009
vidyadhar85's Avatar
Moderador (o tutor)
 

Join Date: Jun 2008
Localização: ÍNDIA
Mensagens: 1.459
Eu não podia entender o seu problema (req) totalmente, mas eu tentei essa ..

Código:
awk 'FNR%2{var=$NF;next}{if(var==$NF){if($4=="239.25.30.26"){v25 += 1}else{v26 += 1}}}END{print "239.25.30.25 - "v25"\n239.25.30.26 - "v26}' filename

  #5 (permalink)  
Old 05-22-2009
Usuário
 

Join Date: May 2009
Lugares: 14
Obrigado

Isso é ótimo, você deu-me o que eu precisava!

Muito obrigado por responder.


Atenciosamente,
Mario
  #6 (permalink)  
Old 05-22-2009
Usuário
 

Join Date: May 2009
Lugares: 14
vidyadhar85,

Para responder à sua pergunta, tenho um arquivo texto contendo os dados de uma rede de captação.

Os dados são duplicados (de propósito) e é enviado para dois destinos (endereços multicast). Às vezes os dados para um destino é recebida em primeiro lugar, outras vezes os dados para o outro é o primeiro destino.

Estou tentando trabalhar para fora o que é normalmente primeiro destino, dependendo da amostra me capturar.

Acabei de ver que, dependendo de qual awk string eu correr a partir das respostas acima, fico com várias saídas / resultados a partir das respostas recebidas, pelo que, provavelmente, ainda seja necessário verificar o que me dá a resposta mais correta para uma determinada amostra.


Penso cambridge do script funciona melhor para mim até agora.


Obrigado novamente.

Mario
  #7 (permalink)  
Old 05-22-2009
Usuário
 

Join Date: May 2009
Lugares: 55
Note que o meu script só trabalha com linhas consecutivas. Começa mais circinal se pretende manipular outros casos, como você precisará decidir quantas linhas deve ser permitido entre cada um para que seja uma amostra válida.
Links Patrocinados
Closed Thread

Marcadores

Thread Tools Pesquisar este Thread
Pesquisar este Thread:

Pesquisa Avançada
Display Modes Esta taxa Thread
Esta taxa Thread:

Destacamento Regimento
Você não pode postar novas threads
Você não pode postar respostas
Você não pode postar anexos
Você não pode editar suas postagens

BB code é Ligado
Smilies são Ligado
[IMG] código é Ligado
Código HTML é Desligado
Trackbacks são Ligado
Pingbacks são Ligado
Refbacks são Desligado


Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
Fio Thread Starter Fórum Respostas Última postagem
comparar campos em um arquivo com registros duplicados rleal Programação Shell Script e 1 01-29-2009 02:55
Como ler e comparar os vários campos de uma coluna, ao mesmo tempo ahjiefreak Programação Shell Script e 1 06-19-2008 12:08
Comparar 2 ficheiros através de múltiplos domínios newinawk Programação Shell Script e 4 06-12-2008 05:34
Compare as duas matrizes em sh ou comparar dois campos rijeshpp Programação Shell Script e 0 10-31-2007 02:47
Passando domínios específicos de arquivos como variáveis keladar UNIX para Dummies Perguntas & Respostas 4 04-13-2005 07:00



Todos os horários são GMT -4. A hora é agora 06:00.


Powered by: vBulletinCopyright © 2000 - 2006, Jelsoft Enterprises Limited. Língua Traduções Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
O UNIX e Linux Brasil Content Copyright © 1993-2010. Todos os direitos Reserved.Ad Gestão por RedTyger

Content Relevant URLs por vBSEO 3.2.0