如何将命令 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 构建一个脚本来剥离前面的部分并将其转换为标题。

相关内容