Como posso dividir o comando stdout em seções, uma para cada arquivo?

Como posso dividir o comando stdout em seções, uma para cada arquivo?

Quando um comando do Linux obtém vários arquivos como entrada. Existe algum comando/truque para dividir comandos stdoutem seções. Um para cada arquivo? Assim, fica visualmente claro quais linhas pertencem a qual arquivo?

Por exemplo, quando comandos como cat, grep, sed, sort, tail, obtêm vários arquivos como entrada. Geralmente, eles imprimem seus resultados continuamente stdout, mas quero dividir o resultado em seções. Um para cada um dos arquivos de entrada

NÃO quero dividir o resultado em arquivos ou dividi-lo pelo número de linhas conforme solicitado emessa questão. A coisa mais próxima que encontrei foi usar find -print -exec commandcomo é explicadoaqui. Mas ainda não é bem o que eu queria.

Supondo que meu comando funcione em file1, file2, e file3, como entrada e imprima o seguinte:

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

Quero que a saída seja formatada de forma semelhante ao seguinte, para que, quando observar o que estava procurando em um arquivo, possa pular para o próximo arquivo:

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

Desde já, obrigado.

Responder1

Se você não se importa com a ordem das linhas além de classificá-las por arquivo, você pode fazer isso com sort, acrescentando cada linha com o id, por exemplo.

file1: line1
file2: line1
file1: line2

Então você pode canalizar o resultado através da classificação:

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

É claro que você também pode adicionar números de linha com esta abordagem - então simplesmente use "sort -n".

Para processá-lo no formato exato desejado, você pode construir um script com awk para retirar a parte frontal e transformá-la em um título.

informação relacionada