Je veux faire un calcul simple du nombre de lignes par minute ajouté à un file journal.
Je veux aussi stocker le count pour chaque seconde.
Ce dont j'ai besoin est la sortie de la command suivante sous la forme d'une list qui sera mise à jour toutes les secondes:
watch -n1 'wc -l my.log'
Comment sortir la 'mise à jour' de la command 'watch' sous forme de list?
Vous pouvez utiliser le commutateur -t
pour watch
ce qui provoque l'printing de l'en-tête. Cependant, cela va encore effacer l'écran afin que vous puissiez être mieux avec une simple boucle de shell:
while sleep 1; do wc -l my.log done
L'un des avantages est que vous pouvez facilement append d'autres commands (par exemple, la date
) et / ou canaliser la sortie via sed
pour le reformater. Par ailleurs, si vous permutez sleep 1
avec wc
dans la boucle, il se terminera automatiquement sur les erreurs.
Une vieille question, mais je viens de find une réponse très facile:
watch -n1 'wc -l my.log | tee -a statistics.log'
Cela va exécuter votre wc
chaque seconde, append sa sortie au file statistics.log, et aussi le montrer sur l'écran.
Ainsi, vous vous refindez avec un file rempli de numbers représentant le nombre de lignes successives de my.log
.
Que diriez-vous
tail -f file.log | pv -rl > /dev/null
Essayez ce qui suit:
watch -n1 'wc -l my.log >> statistics.log'
Vous pouvez créer un script qui le fait pour vous. J'ai appelé le mien keep
(comme, continuez à le faire) et mettez-le sur le path de la bin
.
Ceci est mon script:
#!/bin/bash echo "Repeating command $* every second" while sleep 1; do "$@" done