lors de la personnalisation de plusieurs fichiers à la fois comme indiqué ci-dessous, existe-t-il un moyen d'afficher le nom du fichier au début de chaque ligne?
tail -f one.log two.log
sortie courant
==> one.log <==
contents of one.log here...
contents of one.log here...
==> two.log <==
contents of one.log here...
contents of two.log here..
Vous cherchez quelque chose comme
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
option (verbeuse) pour la queue. Cela peut ne pas correspondre exactement à votre demande, mais c'est un début.Réponses:
\ merci {don_cristti}
la source
awk
solution magique joojoo fonctionne!Réponse courte
GNU Parallel a un ensemble d'options intéressantes qui facilitent vraiment la réalisation de telles choses:
La sortie serait:
Plus d'explication
--tagstring=str
marque chaque ligne de sortie avec la chaîne str . Depuis laparallel
page de manuel :Toutes les occurrences de
{}
seront remplacées par des arguments parallèles qui, dans ce cas, sont des noms de fichiers journaux; c'est-àone.log
- dire ettwo.log
(tous les arguments après:::
).L'option
--line-buffer
est requise car la sortie d'une commande (par exempletail -f one.log
outail -f two.log
) serait imprimée si cette commande est terminée. Depuistail -f
attendra la croissance du fichier, il est nécessaire d'imprimer la sortie en ligne qui le--line-buffer
fait. Encore une fois à partir de laparallel
page de manuel :la source
Si
tail
n'est pas obligatoire, vous pouvez utilisergrep
pour y parvenir:Cela affichera le nom de fichier comme préfixe de chaque ligne de sortie.
La sortie est interrompue si elle n'est
*.log
étendue qu'à un seul fichier. À cet égard:la source
tail -f
nongrep
.--with-filename
ou-H
forcer toujours le préfixe du nom de fichier.awk
solution délicate ouparallel
qui n'est pas installée.Mon idée serait de créer un seul fichier avec des journaux fusionnés à partir de plusieurs fichiers, comme quelqu'un l'a suggéré ici et de préfixer les noms de fichiers:
la source
Quelque chose avec
xargs
etsed
pourrait fonctionner:la source