¿Cómo puedo dividir el comando stdout en secciones, una para cada archivo?

¿Cómo puedo dividir el comando stdout en secciones, una para cada archivo?

Cuando un comando de Linux obtiene varios archivos como entrada. ¿Existe algún comando/truco para dividir los comandos stdouten secciones? ¿Uno para cada archivo? Entonces, ¿queda visualmente claro qué líneas pertenecen a qué archivo?

Por ejemplo , cuando comandos como cat,,,,, grepobtienen varios archivos como entrada. Generalmente, imprimen sus resultados continuamente , pero quiero dividir el resultado en secciones. Uno para cada uno de los archivos de entrada.sedsorttailstdout

NO quiero dividir el resultado en archivos, ni dividirlo por el número de líneas como se solicita enesta pregunta. Lo más parecido que encontré es usar find -print -exec commandcomo se explica.aquí. Pero todavía no es exactamente lo que quería.

Suponiendo que mi comando funciona en file1, file2y file3, como entrada, e imprime lo siguiente:

line1 of file1
line2 of file1
line3 of file1
line1 of file2
line2 of file2
line3 of file2
line1 of file3
line2 of file3
line3 of file3

Quiero que la salida tenga un formato similar al siguiente, de modo que cuando observe lo que estaba buscando en un archivo, pueda saltar al siguiente archivo:

>>> file1 <<<
line1 of file1
line2 of file1
line3 of file1

----------------
>>> file2 <<<
line1 of file2
line2 of file2
line3 of file2

----------------
>>> file3 <<<
line1 of file3
line2 of file3
line3 of file3

Gracias de antemano.

Respuesta1

Si no le importa el orden de las líneas aparte de ordenarlas por archivo, puede hacerlo con sort, anteponiendo cada línea con la identificación, por ejemplo.

file1: line1
file2: line1
file1: line2

Luego puedes canalizar el resultado a través de ordenar:

$ ( process-file1 & process-file2 & ); wait | sort
file1: line1
file1: line2
file2: line1

Por supuesto, también puede agregar números de línea con este enfoque; luego simplemente use "sort -n".

Para procesarlo en el formato exacto que desea, puede construir un script con awk para quitar la parte frontal y convertirla en un encabezado.

información relacionada