Respuesta corta
GNU Parallel tiene un conjunto de buenas opciones que hacen que sea realmente fácil hacer tales cosas:
parallel --tagstring "{}:" --line-buffer tail -f {} ::: one.log two.log
El resultado sería:
one.log: contenido de one.log aquí ...
one.log: contenido de one.log aquí ...
two.log: contenido de two.log aquí ...
two.log: contenido de two.log aquí ...
Más explicaciones
- La opción
--tagstring=str
etiqueta cada línea de salida con string str . Desde la parallel
pá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 decir one.log
y two.log
(todos los argumentos posteriores :::
).
La opción --line-buffer
es necesaria porque la salida de un comando (p. Ej. tail -f one.log
O tail -f two.log
) se imprimirá si ese comando finaliza. Dado tail -f
que esperará el crecimiento del archivo, es necesario imprimir la salida en línea, lo --line-buffer
que lo hace. De nuevo desde la parallel
pá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.
-v
opción (detallada) para la cola. Es posible que esto no coincida exactamente con su solicitud, pero es un comienzo.