Question horodatage à la fin des résultats


Je voudrais avoir un horodatage imprimé devant chaque ligne qui sort d'un "fichier de sortie tail -f", de sorte que je sache 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?


4
2018-06-17 06:04


origine


Notez que vous n'obtenez pas tout à fait ce que vous avez demandé. Les réponses que vous avez reçues reposent sur l’hypothèse que les erreurs d’horodatage introduites par le fait que ce sont les tail écrit sur sa sortie standard, ne pas les moments où les lignes ont été écrites dans le fichier d'origine en premier lieu. Cela ne vous dérange peut-être pas, mais soyez conscient de cette hypothèse dérivée de votre question telle qu'elle est écrite. - JdeBP


Réponses:


Il ne sera probablement pas plus court que cela:

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

Notez que j'ai utilisé le format d'horodatage suggéré par votre question, mais que vous êtes libre d'utiliser date commande (la syntaxe du format est prise en charge par les dates standard BSD et GNU).


5
2018-02-24 07:09



Notez que xargs ignore les lignes vides. Pour mon utilisation, ça va, mais votre kilométrage peut varier. - David Ongaro
Cela va casser si xargs rencontre un devis inégalé " dans la ligne. - MarSoft
Je vois. Peut être tail -f outputfile | tr '\n' '\0' | xargs -0IL date +"%Y%m%d_%H%M%S:L" est mieux dans ce cas? Fonctionne également avec des lignes vides. - David Ongaro


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

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

Pour utiliser le script, insérez simplement la sortie de votre queue:

tail -f outputfile | ./prepend_timestamp.pl

Vous pouvez aussi le faire en ligne:

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

6
2018-06-17 06:11





Avec awk:

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

1
2018-06-17 06:28



Cela imprime le même temps pour toutes les lignes dans mon cas, même si elles apparaissent à 10 secondes près. - Georges Dupéron