3

У меня есть список файлов журнала, которые я создаю как часть сценария кодирования видео, который я написал.

Я хотел бы найти их все и распечатать определенную статистику из кодировки - как быстро они были закодированы, какие настройки использовались и т.д.

Я могу искать среднюю частоту кадров в одном файле через этот 1 лайнер:

cat ${filename} | grep average

какие выводы:

 work: average encoding speed for job is 23.211176 fps

и искать коэффициент фактора:

cat ${filename} | grep RF

Я хотел бы найти все файлы в каталоге и распечатать один или, предпочтительно, обе части информации вместе с именем файла. Есть ли способ, как я могу использовать find или grep чтобы получить это в одну строку, или мне нужно написать скрипт?

Я хотел бы вывод, как это:

/home/javanix/filename.log
    <RF line>
    <average line>

Я хотел бы, чтобы это работало с использованием FreeBSD 9 или Ubuntu 12.04.

5 ответов5

3

Я бы сказал, что вы можете сделать это только с помощью grep:

grep -srHE 'average|RF' path/

s для подавления ошибок, r для рекурсивного, H для отображения имени файла и E (и канал) для соответствия любому из обоих шаблонов.

3

Сделай это:

egrep 'RF|average' *

Вывод не будет соответствовать выводу, показанному выше. Это будет так:

filename1: ...
filename1: ...
filename2: ...
filename3: ...

Некоторые имена файлов будут отображаться только один раз, а некоторые - в зависимости от количества совпадений.

2

Использование awk с желаемым форматом вывода:

awk '/average|RF/{ if(f!=FILENAME){f=FILENAME;print f} print"\t"$0}' *.log

Для рекурсивного поиска,

find path -name '*.log' -type f -exec \
  awk '/average|RF/{if(f!=FILENAME){f=FILENAME;print f}print"\t"$0}' {} \;
0

Попробуйте этот однострочник:

find -exec sh -c 'x=$(grep average "$0";grep RF "$0") && echo "$0\n$x"' {} \;

Это произведет:

<file 1>
<RF line>
<average line>
[...]

Как вы можете видеть, отступы для краткости кода отсутствуют, в качестве альтернативы можно поместить метку в строке файла, например:

[...] echo ">>> $0\n$x"' {} \;
0

Попробуйте эту команду:

grep -P "average|RF" *

grep поиск во всех файлах в каталоге (*) и покажет все совпадения для использования average|RF для Perl-совместимого регулярного выражения (PCRE), которое соответствует как average и RF .

Выходной формат будет следующим:

filename.log:<RF line>
filename.log:<average line>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .