#if-statement #awk #echo #aix
#оператор if #awk #echo #aix
Вопрос:
Я хочу выполнить поиск файлов максимального размера 10 в определенной папке, и если omscb * files превысит пороговое значение, он отправит людям почту для проверки и удаления этих файлов. предположим, что из 10 файлов 3 файла начинаются с omscb * . Я использую AIX. например: — omscb1 5gb omscb2 7gb omscb2 3gb и другие 7 файлов не начинаются с omscb . Итак, у меня есть сценарий записи ниже, но выводится только тот последний файл, который составляет omscb2 3gb, потому что в соответствии с сортировкой он перезаписывает текущие записи. Пожалуйста, подскажите, как получить все имена файлов в выходных данных.
THRESHOLD="5"
LOG=/home/log1.txt
cd /home/var/log
du -sg *|sort -r|head -10 | awk '{print $1"t"$2}' | while read LINE; do
PERC1=`echo $LINE |awk '{print $1}'`
PERC2=`echo $LINE |awk '{print $2}'`
if [ $PERC1 -gt $THRESHOLD ] || [ "$PERC2" = omscb* ] ;then
#echo $PERC1 $PERC2 n >> ${LOG}
fi
done
print $LOG
==============
Заранее спасибо .
Комментарии:
1. Вы должны установить
GNU!find
; функциональность по умолчаниюAIX!find
очень ограничена.
Ответ №1:
Похоже, что большая часть логики может быть инкапсулирована в один оператор awk
du -sg /home/var/log |sort -r|head -10 | awk -v thresh="5" -v logfile="/home/log1.txt" '{ if ($1 > thresh | $2 ~ "omscb") { print $1" "$2 >> logfile;close(logfile) } }'
Передайте вывод отсортированной команды du в awk и передайте файл журнала и пороговое значение в качестве переменных для использования в инструкции awk. Если первое поле, разделенное пробелом, больше порогового значения переменной или шаблон второго поля соответствует «omscb», распечатайте первое и второе поля, разделенные пробелом, в файле журнала и закройте его.