16 votes

Ajout de l'horodatage à la fin des résultats de la commande "tail -f"

Je voudrais avoir un horodatage imprimé devant chaque ligne qui sort d'un "tail -f outputfile", afin de savoir quand chaque ligne est imprimée. Quelque chose comme :

\[...\]
20110617\_070222: résultats imprimés ici
20110617\_070312: résultats imprimés ici
20110617\_070412: résultats imprimés ici
20110617\_070513: résultats imprimés ici
\[...\]

Des idées ?

20voto

Thomas Points 71

Il est probablement difficile de trouver plus court que ça :

tail -f outputfile | xargs -IL date +"%Y%m%d_%H%M%S:L"

Remarquez que j'ai utilisé le format de timestamp suggéré par votre question, mais vous êtes libre d'utiliser n'importe quel format supporté par la commande date (la syntaxe du format est supportée par la date standard BSD et GNU).

6voto

Flimzy Points 4296

Écrivez un script simple pour faire cela. Voici un exemple en perl :

#!/usr/bin/perl
while(<>) {
    print localtime . ": $_";
}

Pour utiliser le script, il suffit de rediriger la sortie de votre queue à travers lui :

tail -f outputfile | ./prepend_timestamp.pl

Vous pourriez aussi le faire en ligne :

tail -f outputfile | perl -pe '$_ = localtime.": $_"'

1voto

Edward Puariea Points 21

Avec awk:

tail -f infile | awk '{"date \"+%Y%m%d_%H%M%S\"" | getline now} {close("date")} {print now ": " $0}'

0voto

Je ferais normalement cela avec perl comme l'ont dit d'autres, mais il était indisponible sur la machine Linux plutôt allégée où j'en avais besoin, mais l'applet awk de busybox l'était !

tail -f some_file  | awk -e '{ print strftime("%Y%m%d_%H%M%S",systime()) "\t" $0}'

Comme toujours, le timestamp est pour quand la ligne a été imprimée, pas quand elle a été écrite à l'origine.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X