テキストファイルに生成された数がゼロでない場合にメールでユーザーに送信する方法

テキストファイルに生成された数がゼロでない場合にメールでユーザーに送信する方法

実行して数を生成する選択クエリがあります。たとえば、次のレコードを含むテキストファイルに回答をエクスポートします。

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コマンドを作成し、必要なチームにメールで送信したいと思います。

これは私が以前使用したものですが、うまくいきません。

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ステートメントと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

走る必要がないと思ったら4つこれに対する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ファイルが存在し、サイズが0より大きい場合、テストはtrueです。

関連情報