Подсчитайте все вхождения тега во множество файлов журнала, используя grep

Мне нужно получить количество тегов, например "103=16", найденных во многих файлах, сколько их, но только файлы, которые имеют одно или несколько вхождений

Я использую:

find . /opt/FIXLOGS/l51prdsrv\* -iname "TRADX\_*oe*.log" -type f -exec grep -F 103=16 -c {} /dev/null ;

который находит файл, в котором находится тег, и показывает количество совпадений, но также показывает 0 вхождений

возвращается

файл1.лог:0

файл2.лог:0

файл3.лог:6

файл4.лог:0

использование -i для исключения 0 или grep -v :0 у меня не сработало, получается результат:

grep: :0: Нет такого файла или каталога

Как я могу получить только те файлы, в которых количество больше 0?

Это работает? find . /opt/FIXLOGS/l51prdsrv* -iname "TRADX_oe.log" -type f -print0 | xargs -0 grep -F 103=16 -c | grep -v ':0$'

Lee 08.02.2023 08:24

Я вообще не понимаю вашего вопроса, но я думаю, что вам может понадобиться grep -m1, который уходит после первого матча.

Mark Setchell 08.02.2023 10:03

Спасибо за ваш отзыв, в конце концов, сработало find . -type f -iname "TRADX_oe.log" -exec grep -cFH "103=16" {} \; | grep -v ":0"

Rickon 08.02.2023 10:52
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
54
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Вы пытались подключиться к grep, чтобы свести на нет те, у которых есть нули после find/exec?

Например, как это работает для меня:

find . -type f -iname "TRADX_oe.log" -exec grep -cFH "103=16" {} \; | grep -v ":0"

Это сработало отлично, я попытался подключить его, но проблема заключалась в том, что я делал это за ; и не ставить 0 в кавычки. Спасибо

Rickon 08.02.2023 10:50

Использование awk, чтобы делать все в одном месте

find . -type f -iname "TRADX_oe.log" -exec awk '/103=16/{c++} END { if (c)print FILENAME, c}' {} \;

Это тоже сработало, это то, что я не знал, что могу использовать, спасибо!

Rickon 08.02.2023 10:51

Вот как работает опция -c grep:

-с, --количество Подавить нормальный вывод; вместо этого напечатайте количество совпадающих строк для каждого входного файла. С -v, --invert-match вариант (см. ниже), считать несовпадающие строки.

Таким образом, он напечатает 0 счетчиков, единственный вариант — удалить 0 с помощью другого grep, используя -v, или использовать awk:

awk '/search_pattern/{f[FILENAME]+=1} END {for(i in f){print i":"f[i]}}' /path/to/files*

Это сработало, когда я передаю grep после ; исключая ноль | grep -v ":0"

заканчивая так:

находить . route -iname "TRAD_oe.log" -type f -exec grep -cHF "103=16" {} ; | grep -v ":0"

Я рекомендую посетить помощь по редактированию, чтобы ваш ответ можно было правильно отформатировать.

hyperupcall 10.02.2023 14:46

Другие вопросы по теме