コマンド stdout を各ファイルごとに 1 つのセクションに分割するにはどうすればよいですか?

コマンド stdout を各ファイルごとに 1 つのセクションに分割するにはどうすればよいですか?

Linux コマンドが複数のファイルを入力として受け取る場合、コマンドをstdoutセクションに分割するコマンドやトリックはありますか。ファイルごとに 1 つずつですか。どの行がどのファイルに属しているかが視覚的に明確になりますか。

たとえば、、、、、などのコマンドがcat複数のgrepファイルを入力として取得する場合、通常は、結果を連続して出力しますが、結果をセクションに分割したいとします。入力ファイルごとに1つずつsedsorttailstdout

結果をファイルに分割したり、行数で分割したりしたくない。この質問私が見つけた最も近いものは、find -print -exec command説明どおりに使用することですここしかし、まだ私が望んでいたものとは少し違います。

私のコマンドがfile1、、file2file3入力として動作し、以下を印刷すると仮定します。

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

出力を次のような形式にして、ファイル内で探しているものが見つかったら次のファイルにジャンプできるようにしたいと思います。

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

前もって感謝します。

答え1

ファイルごとにソートすること以外、行の順序を気にしない場合は、各行の先頭に ID を付加することで sort でこれを行うことができます。例:

file1: line1
file2: line1
file1: line2

次に、結果を sort にパイプします。

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

もちろん、この方法で行番号を追加することもできます。その場合は、単に「sort -n」を使用します。

希望する正確な形式に処理するには、awk を使用してスクリプトを作成し、先頭部分を取り除いて見出しに変換します。

関連情報