これは非常に単純なはずですが、awkスクリプトのフローに問題があります。次のスクリプトを実行すると、出力が何度も出力されます(推測する必要がある場合は、入力ファイルの行ごとに1回出力すると言えます)。要求に応じて、ここにいくつかの偽の入力があります:
[30000] (03/20 00:00:02.950):{0x2D90} Pattern1 5.0.3.57
[30000] (03/20 00:00:03.911):{0x2D90} Pattern2 5.0.3.57
[30000] (03/20 00:00:02.950):{0x2D90} Pattern3 5.0.3.16
[30000] (03/20 00:00:03.911):{0x2D90} Pattern4 5.0.3.16
スクリプトは次のとおりです。
/Pattern1/ {
gsub(/\./,"");
agtver=$5;
}
/Pattern2/ {
gsub(/\./,"");
ctrver=$5;
}
{
if (agtver ~ 50357 && ctrver ~ 50357) {
print "Blamo!";
}
else print "No blamo. :("
}
そして、これが私が得ている出力です:
[chawkins@chawkins-DT Devel]$ ./fakeawk.awk < fake.txt
No blamo. :(
Blamo!
Blamo!
Blamo!
私が期待する出力はBlamo!
、パターンが一致する場合はシングルであり、一致しない場合はシングルNo blamo. :(
です。
問題は、3つの別々の{...}セクションがあることのようですが、これを凝縮する方法がない限り、2つのパターンを処理できるようにするためにこれらが必要です。