вывод печати / почты с помощью команд IF и echo

#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», распечатайте первое и второе поля, разделенные пробелом, в файле журнала и закройте его.