Eu descobri recentemente o pv, e é muito legal, você poderia fazer algo como
tail -f logfile | pv -i2 -ltr > /dev/null
- -i2 = conta a cada 2 segundos
- -l = conta linhas
- -t = tempo de impressão
- -r = taxa de exibição
Eu quero fazer algo assim:
watch tail -f | wc -l
#=> 43
#=> 56
#=> 61
#=> 44
#=> ...
Conta novas linhas de cauda a cada segundo
/ Linux, CentOS
Para ser mais claro. Eu tenho algo assim:
tail -f /var/log/my_process/*.log | grep error
Estou lendo algumas mensagens de erro. E agora eu quero contá-los. Quantos erros eu tenho em um segundo. Portanto, uma linha em um log é um erro em um processo.
Aqui está um método rápido e sujo. Você basicamente quer dividir o tail
e o watch wc
em partes separadas e fazer algo como:
tail -f /var/log/my_process/*.log |grep error > /tmp/error.lines &
watch wc /tmp/error.lines
ponto em que, você pode fazer matemática para obter um número de erros / seg. Mas, se você está apenas fazendo isso para um exame único de sua taxa de erro, rápido e sujo pode ser bom o suficiente.
Caso o pv não esteja disponível, isso pode ser feito com o perl:
a cada segundo:
tail -f recycleBack*out | perl -e 'while (<>) {$l++;if (time > $e) {$e=time;$i++;print "$i=> $l\n";$l=0}}'
a cada 10 segundos
tail -f recycleBack*out | perl -e 'while (<>) {$l++;if (time > $e+10) {$e=time;$i++;print "$i=> $l\n";$l=0}}'
Exemplo de saída:
1=> 1
2=> 1523
3=> 1339
4=> 1508
5=> 1785
6=> 1587
7=> 1770
8=> 1432
9=> 1339
10=> 1555
11=> 1663
12=> 1693
13=> 1647
Você pode tentar algo assim:
tail -f /var/log/my_process/*.log | perl -pe '$_ = "$. $_"'
Imprime o número da linha na frente de cada linha.