Frage Zeitstempel an tail -f-Ergebnisse anhängen


Ich hätte gerne einen Zeitstempel vor jeder Zeile, die aus einem "tail -f-Ausgabedatei" kommt, damit ich weiß, wann jede Zeile gedruckt wird.

[...]
20110617_070222: Ergebnisse hier gedruckt
20110617_070312: Ergebnisse hier gedruckt
20110617_070412: Ergebnisse hier gedruckt
20110617_070513: Ergebnisse hier gedruckt
[...]

Irgendwelche Ideen?


4
2018-06-17 06:04


Ursprung


Beachten Sie, dass Sie nicht genau das bekommen, wonach Sie gefragt haben. Die Antworten, die Sie erhalten haben, basieren auf der Annahme, dass Sie die Timestamp-Fehler, die durch die Tatsache, dass dies die Zeiten sind, nicht stören tail schreibt auf seine Standardausgabe, nicht die Zeiten, in denen die Zeilen ursprünglich in die Originaldatei geschrieben wurden. Es mag Ihnen nichts ausmachen, aber seien Sie sich dieser Annahme bewusst, die sich aus Ihrer Frage ergibt, wie sie geschrieben steht. - JdeBP


Antworten:


Es wird wahrscheinlich nicht kürzer als das:

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

Beachten Sie, dass ich das von Ihrer Frage vorgeschlagene Zeitstempelformat verwendet habe, aber Sie können alles verwenden, was von der. Unterstützt wird date Befehl (die Format-Syntax wird von Standard-BSD- und GNU-Datum unterstützt).


5
2018-02-24 07:09



Beachten Sie, dass xargs ignoriert leere Zeilen. Für meinen Anwendungsfall ist das in Ordnung, aber Ihre Kilometerzahl kann variieren. - David Ongaro
Dies wird unterbrochen, wenn xargs auf ein nicht übereinstimmendes Zitat trifft " in der Schlange. - MarSoft
Aha. Könnte sein tail -f outputfile | tr '\n' '\0' | xargs -0IL date +"%Y%m%d_%H%M%S:L" ist in diesem Fall besser? Funktioniert auch mit leeren Zeilen. - David Ongaro


Schreiben Sie ein einfaches Skript, um das zu tun. Hier ist ein Beispiel in Perl:

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

Um das Skript zu verwenden, leiten Sie einfach Ihre Tail-Ausgabe durch:

tail -f outputfile | ./prepend_timestamp.pl

Du könntest es auch inline machen:

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

6
2018-06-17 06:11





Mit 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



Dies druckt für alle Zeilen in meinem Fall die gleiche Zeit, auch wenn sie 10 Sekunden lang erscheinen. - Georges Dupéron