実行して数を生成する選択クエリがあります。たとえば、次のレコードを含むテキストファイルに回答をエクスポートします。
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ステートメントに;
セミコロンを追加する必要があります。これ以上問題がなければ、正常に動作します。私はあなたのスクリプトも改善しません。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
走る必要がないと思ったら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です。