при одновременной настройке нескольких файлов, как показано ниже, есть ли способ показать имя файла в начале каждой строки?
tail -f one.log two.log
токовый выход
==> one.log <==
contents of one.log here...
contents of one.log here...
==> two.log <==
contents of one.log here...
contents of two.log here..
Ищу что-то вроде
one.log: contents of one.log here...
one.log: contents of one.log here...
two.log: contents of two.log here...
two.log: contents of two.log here...
-v
(подробный) вариант хвоста. Это может не совсем соответствовать вашему запросу, но это только начало.Ответы:
\ спасибо {don_cristti}
источник
awk
решение joojoo работает!Короткий ответ
В GNU Parallel есть множество приятных опций, которые позволяют очень легко делать такие вещи:
Выход будет:
Больше объяснений
--tagstring=str
помечает каждую строку вывода строкой str . Изparallel
man-страницы :Все вхождения
{}
будут заменены аргументами параллели, которые в данном случае являются именами файлов журнала; т.е.one.log
иtwo.log
(все аргументы после:::
).Опция
--line-buffer
обязательна, потому что вывод команды (например,tail -f one.log
илиtail -f two.log
) будет напечатан, если эта команда завершена. Так какtail -f
будет ждать роста файла, необходимо распечатать вывод в виде строки, что--line-buffer
делает это. Снова изparallel
справочной страницы :источник
Если
tail
это не обязательно, вы можете использоватьgrep
для этого:Это напечатает имя файла как префикс каждой строки вывода.
Выходные данные прерываются, если
*.log
расширяется только до одного файла. В этом отношении:источник
tail -f
notgrep
.--with-filename
или-H
всегда форсировать имя файла.awk
решения илиparallel
которое не установлено.Моя идея состоит в том, чтобы создать один файл с объединенными журналами из нескольких файлов, как кто-то предложил здесь, и добавить имена файлов:
источник
Что-то с
xargs
иsed
может работать:источник