Como posso contar comandos em um arquivo de log?

0

Tenho centenas de arquivos de log em um único diretório e quero uma maneira automatizada de navegar pelos arquivos de log para contar o número de vezes que cada comando é usado.

  • Arquivos de log são arquivos de texto
  • Existem mais de 100 comandos diferentes
  • todos começam como "Comando:" e depois o nome do comando.
  • É uma linha por comando
  • outras linhas devem ser ignoradas

Então, eu gostaria de saber se há um script ou software que faria isso e classificar os resultados pelos comandos mais usados e exibir a frequência de cada comando. Algo como estatísticas.

(estou no Win XP e não tenho problemas em instalar programas para este propósito)

    
por ino 25.01.2010 / 17:26

2 respostas

2

Com o Windows PowerShell , você poderia fazer algo nos moldes de:

Get-Content *.log |
    Where-Object { $_.StartsWith('Command:') } |
    Group-Object {
        $null = $_ -match '^Command: (\w+)';
        $Matches[1]
    } |
    Select-Object Name,Count

Para o meu arquivo de teste, isso gera uma saída como

Name Count
---- -----
foo      2
bar      2
baz      1

O código acima simplesmente lê os arquivos de log linha por linha, empurrando cada linha pelo pipeline, depois filtra as linhas para usar somente aquelas que começam com “Command:”, indicando um comando a ser seguido. Então essas linhas são agrupadas nos comandos individuais. Isso é feito pela expressão regular

 ^Command: (\w+)

que corresponde à string "Command:" no início da linha, seguido por um ou mais caracteres de palavras. Isto assume que o nome do comando segue os dois pontos e o espaço imediatamente; ajuste o regex de acordo se este não for o caso. O nome do comando é capturado em um grupo de captura que é usado para agrupamento. Depois disso, apenas o nome e a frequência dos comandos são selecionados.

A parte $null = da correspondência é para suprimir a saída do operador -match , que retornaria sempre True aqui. Não queremos agrupar por True bar , mas apenas por bar .

ETA: Dependendo de como exatamente sua entrada parece, você pode querer ajustar um pouco as coisas.

  • Permitir comandos vazios:

     ^Command: (\w*)
    
  • Permitir caracteres não espaciais arbitrários em nomes de comandos (e comandos vazios):

     ^Command: ([^ ]*)
    
por 25.01.2010 / 17:57
0

Qual sistema operacional?

Esta não é uma correspondência perfeita para sua exigência, mas ...

grep -i -c Command *.log

você obterá o número de ocorrências dividido por arquivo. Você poderia então analisar essa saída para obter seus totais. Despeje-o em um arquivo de texto e puxe-o para o Excel ou algo assim. Não é extremamente difícil, mas também não é totalmente automatizado. Eu sempre acho que passo mais tempo procurando uma solução totalmente automatizada do que usando algo como isso ... Você pode obter o grep para Windows usando cygwin .

    
por 25.01.2010 / 17:41