我有一个运行并生成计数的选择查询。它将答案导出到文本文件中,该文件具有以下记录,例如:
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语句;
中添加分号。如果没有更多问题,它应该可以工作。我也不会改进你的脚本。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" [email protected]
fi
done
另外,您不应该cut
像这样使用命令cut -d"=" -f2
来获取数值吗?最好在循环之外运行命令,看看是否得到任何结果。
答案2
[email protected]
如果文件包含任何非零到任何内容的分配,则发送电子邮件至:
- 过滤掉所有带有分配的行。这可以通过
grep '='
(如果需要更具体的话,也可以使用 `grep 'count=' )来完成。 - 删除带有单独零的行。这可以通过
grep -v -w '0'
(-w
仅匹配完整的单词,即在本例中不是)来完成10
。 - 根据结果采取行动。
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
如果文件存在并且大小大于零,则测试为真。