如何將指令 stdout 分成幾個部分,每個檔案一個部分?

如何將指令 stdout 分成幾個部分,每個檔案一個部分?

當 Linux 指令取得多個檔案作為輸入。是否有任何命令/技巧可以將命令分成stdout幾個部分。每個文件一個?那麼,哪些行屬於哪個文件就變得一目了然了呢?

例如,當catgrepsedsort、 、等指令tail取得多個檔案作為輸入。一般來說,他們在 上連續列印結果stdout,但我想將結果分成幾部分。每個輸入檔一個

我不想將結果分割成文件,或按照中要求的行數分割它這個問題。我發現最接近它的是用find -print -exec command它所解釋的這裡。但仍然不完全是我想要的。

假設我的命令適用於file1file2file3, 作為輸入,並列印以下內容:

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 例如。

file1: line1
file2: line1
file1: line2

然後你可以透過排序管道結果:

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

當然,您也可以使用這種方法添加行號 - 然後只需使用“sort -n”。

要將其處理為您想要的確切格式,您可以使用 awk 建立腳本來剝離前面的部分並將其轉換為標題。

相關內容