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...

-vopción (detallada) para la cola. Es posible que esto no coincida exactamente con su solicitud, pero es un comienzo.Respuestas:
\ gracias {don_cristti}
fuente
awksolució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=stretiqueta cada línea de salida con string str . Desde laparallelpágina del manual :--tagstring str Etiquetar líneas con una cadena. Cada línea de salida se antepondrá con str y TAB (\ t). str puede contener cadenas de reemplazo como {}. --tagstring se ignora cuando se usa -u, --onall y --nonall.Todas las apariciones de
{}serán reemplazadas por argumentos paralelos que, en este caso, son nombres de archivos de registro; es decirone.logytwo.log(todos los argumentos posteriores:::).La opción
--line-bufferes necesaria porque la salida de un comando (p. Ej.tail -f one.logOtail -f two.log) se imprimirá si ese comando finaliza. Dadotail -fque esperará el crecimiento del archivo, es necesario imprimir la salida en línea, lo--line-bufferque lo hace. De nuevo desde laparallelpágina del manual :--line-buffer (prueba alfa) Salida de buffer en línea. --group mantendrá la salida juntos por todo un trabajo. --ungroup permite que la salida se mezcle con media línea de un trabajo y media línea de otro trabajo. --line-buffer se ajusta entre estos dos: GNU paralelo imprimirá una línea completa, pero permitirá mezclar líneas de trabajos diferentes.fuente
Si
tailno es obligatorio, puede utilizargreppara lograr esto:Esto imprimirá el nombre del archivo como el prefijo de cada línea de salida.
La salida se rompe si se
*.logexpande a un solo archivo. A este respecto:fuente
tail -fnotgrep.--with-filenameo-Hforzar siempre el antecedente de nombre de archivo.awksolución difícil oparallelque 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
xargsysedpodría funcionar:fuente