Quando um comando do Linux obtém vários arquivos como entrada. Existe algum comando/truque para dividir comandos stdout
em 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 command
como é 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.