Как разделить stdout команды на разделы, по одному для каждого файла?

Как разделить stdout команды на разделы, по одному для каждого файла?

Когда команда Linux получает несколько файлов в качестве входных данных. Есть ли какая-нибудь команда/трюк для разделения команд stdoutна разделы. По одному для каждого файла? Так, чтобы стало визуально понятно, какие строки принадлежат какому файлу?

Например, когда такие команды, как cat, grep, sed, sort, tailполучают несколько файлов в качестве входных данных. Обычно они печатают свои результаты непрерывно на stdout, Но я хочу разделить результат на разделы. По одному для каждого из входных файлов

Я НЕ хочу разбивать результат на файлы или разбивать его по количеству строк, как это предлагается вэтот вопрос. Самое близкое, что я нашел, это использование find -print -exec commandтого, что объясненоздесь. Но все равно не совсем то, что я хотел.

Предположим, что моя команда работает с file1, file2, и file3, как с входными данными, и выводит следующее:

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, добавив к каждой строке идентификатор, например:

file1: line1
file2: line1
file1: line2

Затем вы можете передать результат через сортировку:

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

Конечно, с помощью этого подхода вы также можете добавлять номера строк — тогда просто используйте «sort -n».

Чтобы преобразовать его в нужный вам формат, вы можете создать скрипт с помощью awk, который удалит начальную часть и превратит ее в заголовок.

Связанный контент