al seguir múltiples archivos a la vez como se muestra a continuación, ¿hay alguna forma de mostrar el nombre del archivo al comienzo de cada línea?
tail -f one.log two.log
salida de corriente
==> one.log <==
contents of one.log here...
contents of one.log here...
==> two.log <==
contents of one.log here...
contents of two.log here..
Buscando algo como
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
opción (detallada) para la cola. Es posible que esto no coincida exactamente con su solicitud, pero es un comienzo.Respuestas:
\ gracias {don_cristti}
fuente
awk
solución mágica joojoo funciona!Respuesta corta
GNU Parallel tiene un conjunto de buenas opciones que hacen que sea realmente fácil hacer tales cosas:
El resultado sería:
Más explicaciones
--tagstring=str
etiqueta cada línea de salida con string str . Desde laparallel
página del manual :Todas las apariciones de
{}
serán reemplazadas por argumentos paralelos que, en este caso, son nombres de archivos de registro; es decirone.log
ytwo.log
(todos los argumentos posteriores:::
).La opción
--line-buffer
es necesaria porque la salida de un comando (p. Ej.tail -f one.log
Otail -f two.log
) se imprimirá si ese comando finaliza. Dadotail -f
que esperará el crecimiento del archivo, es necesario imprimir la salida en línea, lo--line-buffer
que lo hace. De nuevo desde laparallel
página del manual :fuente
Si
tail
no es obligatorio, puede utilizargrep
para lograr esto:Esto imprimirá el nombre del archivo como el prefijo de cada línea de salida.
La salida se rompe si se
*.log
expande a un solo archivo. A este respecto:fuente
tail -f
notgrep
.--with-filename
o-H
forzar siempre el antecedente de nombre de archivo.awk
solución difícil oparallel
que no está instalada.Mi idea sería crear un solo archivo con registros combinados de varios archivos, como alguien sugirió aquí y anteponer nombres de archivo:
fuente
Algo con
xargs
ysed
podría funcionar:fuente