这应该很简单,但我遇到了 awk 脚本流程的问题。我运行以下脚本,它一遍又一遍地打印输出(如果我不得不猜测我会说它为输入文件的每一行打印一次)。根据要求,这是一些假输入:
[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. :(
。
问题似乎是有三个单独的 { ... } 部分,但我需要这些能够处理两种模式......除非有办法浓缩它。