Я бы использовал find
для каждого каталога по очереди и перенаправлял его на grep -q.
, чтобы проверить, есть ли какие-либо результаты, и вывести имя каталога при условии, были ли результаты какие-либо:
for d in */; do find "$d" -type f -mtime -30 | grep -q . && printf %s\\n "$d"; done
С помощью awk
, чтобы напечатать строку ошибки и 10 строк из этого процесса после нее:
awk -F : -v N=10 '/error_has_happened/ {n[$1] = N+1}
n[$1]-- > 0' logfile.log
Вы можете сделать это с помощью:
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