Как отправлять сообщения пользователям, если количество, сгенерированное в текстовом файле, не равно 0

У меня есть запрос выбора, который выполняется и генерирует счетчик. Он экспортирует ответ в текстовый файл, в котором есть следующие записи, например: [

Unprocessed record for A Sources
----------------------Unprocessed record count for ABC SOURCE ------------------
abc_count=            0
--------------------Unprocessed record count for CDE Source --------
CDE_count=            0
-----------------------Unprocessed record count for DEF Source -----------------
DEF_count=            0
------------------Unprocessed record count for GHI Source ----------------------
GHI_count=            56

] Я хочу написать команду Unix, которая проверяет, не равно ли для указанного выше источника какое-либо число, равное 0, а затем отправить его по почте требуемой команде.

Это то, что я использовал ранее, но не работает.

for CHECK in $(awk '{print $1}' hello | grep count=| cut -d"=" -f1) do
    if [ $(grep $CHECK output.txt | awk '{print $2}') -ne 0 ] then
        echo "$(grep $CHECK output.txt)" | mailx -s "CHECK ABC PROCESS" foo@bar.com
    fi
done
0
09.09.2017, 12:33
2 ответа

Вы должны добавить точку с запятой ;в операторе ifперед thenи в forперед do. Если больше нет проблем, он должен работать. Также я не улучшаю ваш сценарий.

Сценарий.

for CHECK in $(awk '{print $1}' hello | grep count=| cut -d"=" -f1); do
    if [ $(grep $CHECK output.txt | awk '{print $2}') -ne 0 ]; then
        echo "$(grep $CHECK output.txt)" | mailx -s "CHECK ABC PROCESS" foo@bar.com
    fi
done

Кроме того, вы не должны использовать команду cutкак эту cut -d"=" -f2, чтобы получить числовое значение? также лучше запускать свои команды вне цикла, чтобы увидеть, получили ли вы какой-либо результат или нет.

0
28.01.2020, 04:40

Чтобы отправить электронное письмо на foo@bar.com, если файл содержит присвоение чего-либо, отличного от -нуля, чему-либо:

  1. Отфильтровать все строки с назначениями. Это можно сделать с помощьюgrep '='(или `grep 'count=', если вам нужна более конкретная информация ).
  2. Удалить строки с одиночными нулями. Это можно сделать с помощьюgrep -v -w '0'(-wдля сопоставления только полных слов, то есть не 10в данном случае ).
  3. Закон о результате.
if grep '=' output.txt | grep -q -v -w '0'; then
    grep '=' output.txt | grep -v -w '0' | mailx -s "Check this out!" foo@bar.com
fi

Для данных в вопросе будет отправлено электронное письмо, содержащее

GHI_count=            56

Если вам кажется ненужным запускать четыре grep для этого:

tmpfile=$(mktemp)
grep '=' output.txt | grep -v -w '0' >"$tmpfile"

if [ -s "$tmpfile" ]; then
    mailx -s "Check this out!" foo@bar.com <"$tmpfile"
fi

rm -f "$tmpfile"

Тест -sбудет верным, если файл существует и его размер больше нуля.

0
28.01.2020, 04:40

Теги

Похожие вопросы