如果文本文件中生成的计数不等于 0,如何通过邮件发送给用户

如果文本文件中生成的计数不等于 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" [email protected]
    fi
done

答案1

您应该在before和 in before语句;中添加分号。如果没有更多问题,它应该可以工作。我也不会改进你的脚本。ifthenfordo

剧本。

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" [email protected]
    fi
done

另外,您不应该cut像这样使用命令cut -d"=" -f2来获取数值吗?最好在循环之外运行命令,看看是否得到任何结果。

答案2

[email protected]如果文件包含任何非零到任何内容的分配,则发送电子邮件至:

  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!" [email protected]
fi

对于问题中的数据,将发送一封电子邮件,其中包含

GHI_count=            56

如果觉得没有必要跑步grep 为此:

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

if [ -s "$tmpfile" ]; then
    mailx -s "Check this out!" [email protected] <"$tmpfile"
fi

rm -f "$tmpfile"

-s如果文件存在并且大小大于零,则测试为真。

相关内容