Come guardare per contare le nuove linee in coda


9

Voglio fare qualcosa del genere:

watch tail -f | wc -l
#=> 43
#=> 56
#=> 61
#=> 44
#=> ...

Conta nuove linee di coda ogni secondo

/ Linux, CentOs

Per essere più chiari. Ho qualcosa del genere:

tail -f /var/log/my_process/*.log | grep error

Sto leggendo alcuni messaggi di errore. E ora voglio contarli. Quanti ~ errori ho ricevuto in un secondo. Quindi una riga in un registro è un errore in un processo.


Cosa stai cercando di fare? Se vuoi guardare le linee aggiunte, è sufficiente usarlo tail -f /path/to/fileda solo. Se vuoi guardare le righe dei file, puoi usare watch wc -l /path/to/file.
Khaled,

@Khaled, devo vedere quante nuove linee sono state aggiunte
fl00r

Uso tail con regex per un numero di file e voglio vedere quante righe sono state aggiunte a tutti questi file nel tempo
fl00r

1
Hmpfh. tail -f /var/log/my_process/*.log |grep error > /tmp/error.lines & ; watch wc /tmp/error.lines? Quindi fai matematica.
cjc,

@cjc funziona, grazie! :) dovresti farlo come una risposta ab
fl00r

Risposte:


24

Di recente ho scoperto il fotovoltaico, ed è davvero bello, potresti fare qualcosa del genere

tail -f logfile | pv -i2 -ltr > /dev/null

  • -i2 = conta ogni 2 secondi
  • -l = linee di conteggio
  • -t = tempo di stampa
  • -r = mostra la velocità

3

Ecco un metodo rapido e sporco. Fondamentalmente vuoi rompere il taile il watch wcin parti separate e fare qualcosa del tipo:

tail -f /var/log/my_process/*.log |grep error > /tmp/error.lines &
watch wc /tmp/error.lines

a quel punto, puoi fare matematica per ottenere un numero di errori / sec. Ma, se lo fai solo per un esame una tantum del tuo tasso di errore, la soluzione rapida e sporca potrebbe essere abbastanza buona.


3

Nel caso in cui pv non sia disponibile, può essere fatto con perl:

Ogni secondo:

tail -f  recycleBack*out  | perl -e 'while (<>) {$l++;if (time > $e) {$e=time;$i++;print "$i=> $l\n";$l=0}}'

Ogni 10 secondi

tail -f  recycleBack*out  | perl -e 'while (<>) {$l++;if (time > $e+10) {$e=time;$i++;print "$i=> $l\n";$l=0}}'

Uscita campione:

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

-1

Potresti provare qualcosa del genere:

tail -f /var/log/my_process/*.log | perl -pe '$_ = "$. $_"'

Stampa il numero di riga davanti a ciascuna riga.


1) Non è quello che l'OP sta cercando e 2) nllo farà, senza richiedere la chiamata a perl.
SEE
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.