Как с помощью awk вычислить разницу даты не потеряв всю «таблицу»?
Команда выводит какие задачи сейчас работают и когда эти задачи запущены.
# bjobs -u all -o «jobid user stat SUBMIT_TIME» JOBID USER STAT SUBMIT_TIME 16188 chemicalinorg_serov RUN Aug 29 12:04 16286 aerohydromech RUN Sep 10 11:35 16287 ifmbmdcam RUN Sep 10 16:03 16283 KozlovaAS RUN Sep 8 13:32 16307 chemicalorg RUN Sep 13 14:37 16306 KozlovaAS RUN Sep 13 14:31
Требуется прикрутить мониторинг на zabbix, чтобы слались сообщения, когда задача выполняется слишком долго, более 10 дней. То есть нужно анализировать 4 и 5 столбцы, сравнивать с текущей датой и в случае разрыва более 10 дней отправлять алерт. Ничего умнее не придумал, как месяцы умножать на 30, прибавлять дни и получать количество дней от нового года
#DATENOW=$(date +%m:%d | awk -F ":" '{print ($1*30+$2)}') #echo $DATENOW 284
По той же самой логике работаю с выводом:
# bjobs -u all -o «jobid user stat SUBMIT_TIME» | tail -n +2 | awk ' (system(«date +%m:%d --date=\»"$4 $5"\""))' | awk -F ":" '{print ($1*30+$2)}' 269 280 280 278 283 283 284
теперь сравниваем с нашей переменной DATENOW
# bjobs -u all -o «jobid user stat SUBMIT_TIME» | tail -n +2 | awk ' (system(«date +%m:%d --date=\»"$4 $5"\""))' | awk -F ":" '(('$DATENOW'-($1*30+$2)) > 10)' 08:29
Все верно, самая первая строка «16188 chemicalinorg_serov RUN Aug 29 12:04» содержит дату старше нынешней (14 сентября) с дельтой более 10 дней.
Я не понимаю как в одном awk соединить преобразование даты (из Aug 29 в 08:29) и последующее вычисления дней (awk -F ":" '{print ($1*30+$2)}'), да еще без потери первых двух столбцов (jobid user).
Подскажите, пожалуйста.
# bjobs -u all -o «jobid user stat SUBMIT_TIME» JOBID USER STAT SUBMIT_TIME 16188 chemicalinorg_serov RUN Aug 29 12:04 16286 aerohydromech RUN Sep 10 11:35 16287 ifmbmdcam RUN Sep 10 16:03 16283 KozlovaAS RUN Sep 8 13:32 16307 chemicalorg RUN Sep 13 14:37 16306 KozlovaAS RUN Sep 13 14:31
Требуется прикрутить мониторинг на zabbix, чтобы слались сообщения, когда задача выполняется слишком долго, более 10 дней. То есть нужно анализировать 4 и 5 столбцы, сравнивать с текущей датой и в случае разрыва более 10 дней отправлять алерт. Ничего умнее не придумал, как месяцы умножать на 30, прибавлять дни и получать количество дней от нового года
#DATENOW=$(date +%m:%d | awk -F ":" '{print ($1*30+$2)}') #echo $DATENOW 284
По той же самой логике работаю с выводом:
# bjobs -u all -o «jobid user stat SUBMIT_TIME» | tail -n +2 | awk ' (system(«date +%m:%d --date=\»"$4 $5"\""))' | awk -F ":" '{print ($1*30+$2)}' 269 280 280 278 283 283 284
теперь сравниваем с нашей переменной DATENOW
# bjobs -u all -o «jobid user stat SUBMIT_TIME» | tail -n +2 | awk ' (system(«date +%m:%d --date=\»"$4 $5"\""))' | awk -F ":" '(('$DATENOW'-($1*30+$2)) > 10)' 08:29
Все верно, самая первая строка «16188 chemicalinorg_serov RUN Aug 29 12:04» содержит дату старше нынешней (14 сентября) с дельтой более 10 дней.
Я не понимаю как в одном awk соединить преобразование даты (из Aug 29 в 08:29) и последующее вычисления дней (awk -F ":" '{print ($1*30+$2)}'), да еще без потери первых двух столбцов (jobid user).
Подскажите, пожалуйста.