Gibt es ein Unix-Dienstprogramm, um Timestamps zu stdin vorzugeben?
Landete ich schriftlich ein kurzes Skript in Python, aber ich Frage mich, ob es ein Dienstprogramm, die Sie füttern könnten, um text in das voranstellen würde jede Zeile mit etwas text-in meinem konkreten Fall, einen Zeitstempel. Im Idealfall, der Einsatz wäre so etwas wie:
cat somefile.txt | prepend-timestamp
(Bevor Sie Antworten sed, ich versuchte dies:
cat somefile.txt | sed "s/^/`date`/"
Aber, dass nur bewertet den date-Befehl einmal bei der sed ausgeführt wird, also den gleichen Zeitstempel ist falsch vorangestellt, um jede Zeile.)
InformationsquelleAutor der Frage Joe Shaw | 2008-08-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten versuchen, mit
awk
:Müssen Sie möglicherweise stellen Sie sicher, dass
<command>
produziert line-buffered output, d.h. es spült seine stream-Ausgabe nach jeder Zeile; den timestampawk
fügt hinzu, wird die Zeit, die das Ende der Linie erschien auf Ihrem Eingabe-pipe.Wenn awk Fehler angezeigt wird, dann versuchen Sie
gawk
statt.InformationsquelleAutor der Antwort Kieron
ts
aus moreutils voran, ein Zeitstempel für jede Linie der input, den Sie geben. Sie können formatieren mit strftime zu.Installieren:
InformationsquelleAutor der Antwort Mark McKinstry
kommentierenerhältlich über diesen link oder als
annotate-output
im Debian -devscripts
Paket.InformationsquelleAutor der Antwort Ted Percival
Destillation der gegebenen Antworten auf die einfachsten möglich:
Auf Ubuntu, Sie kommen aus der expect-dev und moreutils-Pakete.
InformationsquelleAutor der Antwort Willem
Wie über dieses?
Ausgehend von Ihrem Wunsch zu bekommen live Zeitstempel, möchten Sie vielleicht zu tun ist, live-Aktualisierung auf eine log-Datei oder sowas??? Vielleicht
InformationsquelleAutor der Antwort jj33
Nur gonna werfen, die es gibt: es gibt ein paar Hilfsmittel in daemontools genannt tai64n und tai64nlocal für vorangestelltem Zeitstempel, Nachrichten zu protokollieren.
Beispiel:
InformationsquelleAutor der Antwort chazomaticus
Kieron s Antwort ist die beste bisher. Wenn Sie Probleme haben, weil das erste Programm ist die Pufferung seiner aus können Sie die unbuffer Programm:
Es ist standardmäßig installiert auf den meisten linux-Systemen. Wenn Sie brauchen, um zu bauen Sie es selbst, es ist Teil der erwarten package
http://expect.nist.gov
InformationsquelleAutor der Antwort Mark Harrison
Verwenden Sie die read(1) Befehl zum Lesen einer Zeile von standard-input, dann output der Zeile vorangestellt das Datum in das format Ihrer Wahl mit date(1).
InformationsquelleAutor der Antwort caerwyn
Ich bin kein Unix-Mensch, aber ich denke, dass Sie verwenden können,
InformationsquelleAutor der Antwort PabloG
InformationsquelleAutor der Antwort
Hier mein awk-Lösung (von einem Windows/XP-system mit MKS-Tools installiert in der C:\bin -Verzeichnis). Es ist entwickelt, um das aktuelle Datum und Zeit in der form mm/dd hh:mm am Anfang jeder Zeile geholt, der Zeitstempel von der system-wie jede Zeile gelesen wird. Man könnte natürlich, verwenden Sie das BEGIN-Muster zum abrufen der timestamp einmal und fügt hinzu, dass Zeitstempel für jeden Datensatz (alle die gleichen). Ich habe an diesem tag eine log-Datei, die generiert wurde, auf die Standardausgabe mit dem Zeitstempel zum Zeitpunkt der log-Meldung generiert wurde.
/"pattern"/ "C\:\\\\bin\\\\date '+%m/%d %R'" | getline timestamp;
print timestamp, $0;
wobei "Muster" ein string oder regex (ohne die Anführungszeichen) ergänzt werden, in der Eingabe-Zeile und ist optional, wenn Sie möchten, passen alle input-Zeilen.
Sollte diese Arbeit auf Linux/UNIX-Systeme als gut, einfach loszuwerden, die C\:\\bin\\ so dass die Linie
Dies setzt natürlich Voraus, dass der Befehl "date" wird Sie auf der standard-Linux - /UNIX-Datums-Anzeige/set-Befehl ohne spezifischen Pfad-Informationen (das heißt, die Umgebungsvariable PATH-variable richtig konfiguriert ist).
InformationsquelleAutor der Antwort ElGringoGeek
Mischen einige Antworten von natevw und Frank Ch. Eigler.
Es hat Millisekunden, besser abschneidet als der Aufruf einer externen
date
Befehl jedes mal und perl findet man bei den meisten Servern.Alternative version mit flush und lese in einer Schleife:
InformationsquelleAutor der Antwort Keymon
caerwyn Antwort ausgeführt werden kann, da ein Unterprogramm, das verhindern würde, dass die neuen Prozesse pro Zeile:
InformationsquelleAutor der Antwort crumplecrap
Haftungsausschluss: die Lösung, die ich dir Vorschlage, ist nicht ein Unix-Dienstprogramm.
Stand ich vor einem ähnlichen problem vor ein paar Tagen. Ich wusste nicht, wie die syntax und die Einschränkungen der oben genannten Lösungen, so dass ich schnell ein Programm zusammengestellt, das Sie in Gehen, um die Arbeit zu tun für mich.
Können Sie das tool hier: preftime
Gibt es vorgefertigte Binärdateien für Linux, MacOS und Windows in die Freigaben Abschnitt der GitHub-Projekt.
Das tool übernimmt unvollständige Ausgabe-Linien und hat (aus meiner Sicht) eine kompaktere syntax.
<command> | preftime
Es ist nicht ideal, aber ich dachte, ich würde teilen, falls es jemand hilft.
InformationsquelleAutor der Antwort Momchil Atanasov
können Sie dies tun (mit gnu/sed):
Beispiel:
natürlich können Sie mit weiteren Optionen des Programms Datum. ersetzen Sie einfach
date +%T
mit, was Sie brauchen.InformationsquelleAutor der Antwort alexander barakin
tun es mit
date
undtr
undxargs
auf OSX:wenn Sie wollen Millisekunden:
aber beachten Sie, dass auf OSX, Datum nicht geben Sie die %N-option, so dass Sie installieren müssen, gdate (
brew install coreutils
) und so schließlich kommen diese:InformationsquelleAutor der Antwort orion elenzil
Wenn der Wert, den Sie voranstellen, ist das gleiche auf jeder Linie, starten Sie emacs die Datei, dann:
Strg + <space>
am Anfang der der Datei (markieren Sie diese Stelle), dann nach unten scrollen, an den Anfang der letzten Zeile (Alt + > gehen an das Ende der Datei... die wird wahrscheinlich beinhalten die Shift-Taste, dann Strg + a, um an den Anfang der Zeile) und:
Strg + x r t
Ist der Befehl zum einfügen in das Rechteck, das Sie gerade angegeben (ein Rechteck von 0-Breite).
2008-8-21 6:45 UHR <enter>
Oder was auch immer Sie voranstellen möchten,... dann werden Sie sehen, dass text vorangestellt, um jede Zeile innerhalb der 0 Breite Rechteck.
UPDATE: ich habe gerade festgestellt, die Sie nicht wollen, das GLEICHE Datum, so wird dies nicht funktionieren... obwohl Sie möglicherweise in der Lage, dies zu tun in emacs eine etwas komplexere benutzerdefinierte makro, aber immer noch, diese Art von Rechteck Bearbeiten, ist Recht nett zu wissen...
InformationsquelleAutor der Antwort Mike Stone