Das sollte ziemlich einfach sein, aber ich habe ein Problem mit dem Fluss eines Awk-Skript. Ich führe das folgende Skript aus und es druckt die Ausgabe immer und immer wieder (wenn ich raten müsste, würde ich sagen, dass es einmal für jede Zeile der Eingabedatei druckt). Wie gewünscht, hier einige gefälschte Eingabe:Ausgabe für jede Zeile der Eingabedatei erhalten. Ich brauche nur einmal Ausgabe
[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
Hier ist das Skript:
/Pattern1/ {
gsub(/\./,"");
agtver=$5;
}
/Pattern2/ {
gsub(/\./,"");
ctrver=$5;
}
{
if (agtver ~ 50357 && ctrver ~ 50357) {
print "Blamo!";
}
else print "No blamo. :("
}
Und hier ist die Ausgabe, die ich bekomme:
[[email protected] Devel]$ ./fakeawk.awk < fake.txt
No blamo. :(
Blamo!
Blamo!
Blamo!
Die Ausgabe, die ich erwartet ist eine einzige Blamo!
, wenn die Muster übereinstimmen und eine einzige No blamo. :(
wenn es nicht übereinstimmen.
Das Problem scheint zu sein, dass es drei separate {...} Abschnitte gibt, aber ich brauche diese, um zwei Muster verarbeiten zu können ... es sei denn, es gibt eine Möglichkeit, dies zu verdichten.
Ich sehe das (plus eine ganze Menge mehr): 'Blamo! Blamo! Blamo! Blamo! Blamo! Blamo! Blamo! Blamo! Blamo! Blamo! Blamo! Blamo! ' Die Logik funktioniert wie erwartet, es gibt nur viel zu viel aus. – satori7
Sie sagen nicht wirklich, was genau das Skript tun soll. Es tut, was du sagst, auch wenn du das nicht gemeint hast. Vielleicht möchten Sie Agt- und Ctr-Versionen auf Null setzen, abgesehen davon, was soll das Skript eigentlich machen? Was soll die Ausgabe für diese Beispieldaten sein? – Kevin