Gibt es eine Möglichkeit, den Dateinamen am Anfang jeder Zeile anzuzeigen, wenn Sie wie unten gezeigt mehrere Dateien gleichzeitig verfolgen?
tail -f one.log two.log
aktueller Output
==> one.log <==
contents of one.log here...
contents of one.log here...
==> two.log <==
contents of one.log here...
contents of two.log here..
Suchen Sie nach etwas wie
one.log: contents of one.log here...
one.log: contents of one.log here...
two.log: contents of two.log here...
two.log: contents of two.log here...
-v
(ausführliche) Option für tail ansehen . Dies entspricht möglicherweise nicht genau Ihrer Frage, ist aber ein Anfang.Antworten:
\ Dankeschön {don_cristti}
quelle
awk
lösung!Kurze Antwort
GNU Parallel hat eine Reihe netter Optionen, die es wirklich einfach machen, solche Dinge zu tun:
Die Ausgabe wäre:
Weitere Erklärung
--tagstring=str
markiert jede Ausgabezeile mit string str . Aus derparallel
Manpage :Alle Vorkommen von
{}
werden durch die Argumente von parallel ersetzt, die in diesem Fall Protokolldateinamen sind. dhone.log
undtwo.log
(alle Argumente danach:::
).Diese Option
--line-buffer
ist erforderlich, da die Ausgabe eines Befehls (z. B.tail -f one.log
odertail -f two.log
) gedruckt wird, wenn dieser Befehl beendet ist. Datail -f
auf das Wachstum der Dateien gewartet wird, ist es erforderlich, die Ausgabe online zu drucken--line-buffer
. Nochmals von derparallel
Manpage :quelle
Wenn dies
tail
nicht obligatorisch ist, können Siegrep
dazu Folgendes verwenden:Dies gibt den Dateinamen als Präfix jeder Ausgabezeile aus.
Die Ausgabe wird unterbrochen, wenn
*.log
nur eine Datei angezeigt wird. In dieser Hinsicht:quelle
tail -f
nicht anzeigengrep
.--with-filename
oder-H
immer das Voranstellen von Dateinamen erzwingen.awk
Lösung oderparallel
die nicht installiert ist.Meine Idee wäre, eine einzelne Datei mit zusammengeführten Protokollen aus mehreren Dateien zu erstellen, wie hier vorgeschlagen , und Dateinamen voranzustellen:
quelle
Etwas mit
xargs
undsed
könnte funktionieren:quelle