stdoutコマンドを各ファイルに1つずつ複数の部分に分割するにはどうすればよいですか?

stdoutコマンドを各ファイルに1つずつ複数の部分に分割するにはどうすればよいですか?

Linuxコマンドが複数のファイルを入力として使用する場合。コマンドをstdout複数の部分に分割するコマンド/トリックはありますか?ファイルごとに1つずつ?これにより、どの行がどのファイルに属するかが明らかになります。

たとえば、、、、catなどgrepsedコマンドsorttail複数のファイルを入力として取得する場合です。通常、結果を連続して印刷しますstdoutが、結果をさまざまな部分に分割したいと思います。各入力ファイルごとに1つずつ

結果をファイルに分割したり、必要な行数に分割したくありません。この問題。私が見つけた最も近いものは次のように説明され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

ファイルごとに並べ替える以外に行の順序に興味がない場合は、 sort を使用して、たとえば各行の前に ID を付けてこれを実行できます。

file1: line1
file2: line1
file1: line2

その後、次のようにパイプラインの結果を並べ替えることができます。

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

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

これを目的の正確な形式で処理するには、awkを使用して前の部分を削除してヘッダーに変換するスクリプトを作成できます。

おすすめ記事