Когда команда 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, который удалит начальную часть и превратит ее в заголовок.