Contando linhas duplicadas de um fluxo

2

Atualmente estou analisando registros do apache com esse comando:

tail -f /opt/apache/logs/access/gvh-access_log.1365638400  | 
grep specific.stuff. | awk '{print $12}' | cut -d/ -f3 > ~/logs

A saída é uma lista de domínios:

www.domain1.com
www.domain1.com
www.domain2.com
www.domain3.com
www.domain1.com

Em outro terminal, executo este comando:

watch -n 10 'cat ~/logs | sort | uniq -c | sort -n | tail -50'

A saída é:

1023 www.domain2.com
2001 www.domain3.com
12393 www.domain1.com

Eu uso isso para monitorar as estatísticas do apache em tempo quase real. O problema é que logs fica muito grande muito rápido. Eu não preciso de logs para nenhum outro propósito além de uniq -c .

A minha pergunta é: existe alguma maneira de evitar o uso de um arquivo temporário? Eu não quero passar meu próprio contador no meu idioma de preferência, gostaria de usar alguns awk magic, se possível.

Observe que, como preciso usar sort , preciso usar um arquivo temporário no processo, porque a classificação em fluxos não tem sentido (embora uniq não seja).

    
por cpa 11.04.2013 / 11:05

1 resposta

0

Embora possa estar apontando o óbvio, mas você tentou isso:

tail -f /opt/apache/logs/access/gvh-access_log.1365638400  | grep specific.stuff. | awk '{print $12}' | cut -d/ -f3 | sort | uniq | sort -n | tail -50

Eu sei que é uma longa linha de comando, mas elimina a criação do arquivo intermediário. Se isso não está funcionando para você, você poderia por favor dizer por que, para que você possa obter respostas mais significativas.

    
por 11.04.2013 / 11:24