find
имеет действие fprint
, которое может записывать результаты команды find в файл. Затем вы можете расширить свою команду как:
find $backup_path/$HOSTNAME.*.img -mtime +$retention_days -type f -fprint /path/to/log.txt -delete
Затем вы можете получить количество файлов из файла журнала, используяwc
:
cat /path/to/log.txt | wc -l
Если в результатах поиска могут появляться специальные символы, в качестве альтернативы можно использовать опцию fprint0
. Это запишет результаты в указанный файл в виде строк с нулевыми разделителями -.
Чтобы подсчитать элементы в результирующем файле, вы можете просмотреть параметры, обсуждаемые в этом вопросе.:Подсчитать элементы с нулевым разделителем в файле .
Если я вас правильно понял, вы хотите вывести строки между первым и следующим вхождением SEVERE
после последнее вхождение Server version
.
Пример входного файла:
Server version
SEVERE
ignore
SEVERE
Server version
ignore
SEVERE
important
stuff
SEVERE
ignore
SEVERE
awk '
/Server version/{ chunk="" }
/SEVERE/{ logme=(chunk=="") }
logme{ chunk=chunk $0 RS }
END{ printf "%s", chunk }
' file
Выход:
SEVERE
important
stuff
Многострочный -контур :Выведите номера строк с помощью grep, извлеките их и используйте awk
grep -n SEVERE filename | head -n 2 | cut -d ':' -f1
Это выведет первые 2 номера строки [a, b], содержащие «СЕРЬЕЗНЫЙ», и awk может легко напечатать СЕРЬЕЗНЫЙ и промежуточные строки...
awk 'NR>=a && NR<=b {print $0;}' filename
Это можно легко реализовать в сценарии -, но для этого требуется двойной проход по файлу журнала.