次の小さなawkスクリプトを使用して電子メール通知を受け取ります。しかし、このメールを受けたいです。ただ$1
100以上の場合。
ifステートメントはどこに配置する必要がありますか?私は成功せずに多くのバージョンを試しました。私のスクリプトに従ってください。
awk '
BEGIN{print "Subject:SASL Spam\nFrom:Server.de <[email protected]>\nTo:[email protected]"}
END{printf("%s\015\n", $1" | "$2)}
' /home/web0/html/tools/uptime/sasl.txt | /usr/lib/sendmail -t [email protected]
答え1
次のようにできます(読みやすくするために少し減らしました)。
{ awk 'BEGIN{...} END{...} END{if($1<100){exit(1)}}' file || exit; } > >(sendmail -t ...)
awk
と言う複合コマンド。if($1<100)
値の確認exit(1)
内部コードの追加実行を中止awk
し、終了コード1を返します。
|| exit
awk
コマンドがfalse(0より大きい終了コード)を返すと実行されます。その後、シェルを終了してコマンドを実行しないでください。ここではパイプを使用しません。|
パイプを使用すると、サブシェルが開き、そのサブシェルが終了し、とにかく次のコマンドが実行されるためです。>(sendmail -t ...)
出力が送信されますsendmail
(まだ終了していない場合)。
完全なコマンドは次のとおりです。
{ awk 'BEGIN{print "Subject:SASL Spam\nFrom:Server.de <[email protected]>\nTo:[email protected]"}
END{printf("%s\015\n", $1" | "$2)} END{if($1<100){exit(1)}}' \
/home/web0/html/tools/uptime/sasl.txt || exit; } > >(/usr/lib/sendmail -t [email protected])
答え2
したがって、これは単一のawkステートメントを使用して、ソースファイル内の100より大きい数字で始まる行のデータのみを含む電子メールを準備します。どちらもこの条件を満たさない場合、電子メールは送信されません。これが私が考えるものです。実装したい実装です。また、数値比較を混乱させる可能性のある予期しないテキストがある場合は、最初のフィールドが数値であることを確認してください。
awk '
{
if ($1~/^[0-9]*$/ && $1>=100) {
if (BEENHERE!=1) print "Subject:SASL Spam\nFrom:Server.de <[email protected]>\nTo:[email protected]\n"
printf("%s\015\n", $1" | "$2); BEENHERE=1
}
}' /home/web0/html/tools/uptime/sasl.txt | \
/usr/lib/sendmail -t [email protected]