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=stretiqueta 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.logy two.log(todos los argumentos posteriores :::).
La opción --line-bufferes necesaria porque la salida de un comando (p. Ej. tail -f one.logO tail -f two.log) se imprimirá si ese comando finaliza. Dado tail -fque esperará el crecimiento del archivo, es necesario imprimir la salida en línea, lo --line-bufferque 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.
-vopción (detallada) para la cola. Es posible que esto no coincida exactamente con su solicitud, pero es un comienzo.