Cuando un comando de Linux obtiene varios archivos como entrada. ¿Existe algún comando/truco para dividir los comandos stdout
en secciones? ¿Uno para cada archivo? Entonces, ¿queda visualmente claro qué líneas pertenecen a qué archivo?
Por ejemplo , cuando comandos como cat
,,,,, grep
obtienen 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.sed
sort
tail
stdout
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 command
como se explica.aquí. Pero todavía no es exactamente lo que quería.
Suponiendo que mi comando funciona en file1
, file2
y 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.