grep только для строк процесса, вызвавших ошибку

Я бы использовал find для каждого каталога по очереди и перенаправлял его на grep -q. , чтобы проверить, есть ли какие-либо результаты, и вывести имя каталога при условии, были ли результаты какие-либо:

for d in */; do find "$d" -type f -mtime -30 | grep -q . && printf %s\\n "$d"; done
3
12.01.2017, 15:36
2 ответа

С помощью awk , чтобы напечатать строку ошибки и 10 строк из этого процесса после нее:

awk -F : -v N=10 '/error_has_happened/ {n[$1] = N+1}
                  n[$1]-- > 0' logfile.log
2
27.01.2020, 21:15

Вы можете сделать это с помощью:

grep "error_has_happened" -A3 logfile.log

Где 3 - количество строк после появления error_has_happened, которые будут отображаться. Однако это также покажет другие выходы процесса, а не только выходы процесса, который отправляет ошибку.

Более продуманная команда, которая сработала для меня в быстром тесте:

grep "error_has_happened" logfile.log | cut -d : -f1 | sort -u |
  while IFS= read -r process; do
    grep "^$process:" logfile.log |
      grep -A3 "error_has_happened"
  done
3
27.01.2020, 21:15

Теги

Похожие вопросы