Tail - Find - Tee

Hallo Allerseits,

ich lasse folgenes CMD laufen:

FOR /L %%i IN (1,1,10) DO ipconf.cmd

ipconf.cmd Anfang:
ipconfig >> ACQ.log
ping 1.1.1.1 -n 1 -w 15000 > nul
ipconf.cmd Ende:

Mit

tail -f ACQ.log | find „VMnet8“ | tee -a TEE_TEST_mit_FIND.txt

schreibe ich die Zeilen, die VMnet8 enthalten, in eine Datei.

In der Datei sind dann auch 10 Zeilen zu finden.
In der DOS-Box (so nenne ich sie immer noch :wink: ) erscheinen aber nur 9. Die zehnte fehlt:

g:\Test_Tail>tail -f ACQ.log | find „VMnet8“ | tee -a TEE_TEST_mit_FIND.txt
Ethernet adapter VMware Network Adapter VMnet8:
Ethernet adapter VMware Network Adapter VMnet8:
Ethernet adapter VMware Network Adapter VMnet8:
Ethernet adapter VMware Network Adapter VMnet8:
Ethernet adapter VMware Network Adapter VMnet8:
Ethernet adapter VMware Network Adapter VMnet8:
Ethernet adapter VMware Network Adapter VMnet8:
Ethernet adapter VMware Network Adapter VMnet8:
Ethernet adapter VMware Network Adapter VMnet8:
^C^C^C

Da ich das aber für eine dauerhafte aktive Beobachtung nutzen und nicht immer die Datei zum prüfen öffnen will, um zu sehen, ob wieder etwas passiert ist (Endversion soll „ewig“ laufen), wäre es wichtig immer auch den letzten Treffer im DOS-Fenster zu sehen.

Kennt jemand eine Lösung.

Win 7 Ultimate 64 Bit
Tail und Tee aus der GnuWin32 Sammlung
Find aus Betriebssystem

Danke im Voraus

MfG

Hi Al,

normalerweise versuche ich, einfach die angefragte Lösung zu liefern, ohne das warum und wieso in Frage zu stellen. Im vorliegenden Fall mache ich mal eine Ausnahme, der Code so wie Du ihn baust kommt mir ausgesprochen umständlich vor, und macht darüber hinaus nichts was ich als sinnvoll erkennen kann.

Auch wenn Du die 10 Zeile irgendwo finden würdest, wird aus diesem Codebruchstück m.E kein sinnvolles Programm, weil in der 10. Zeile auch nichts anderes steht als in den 9 Zeilen davor:

„Ethernet adapter VMware Network Adapter VMnet8:“

Wäre da irgendwo ein Timestamp, und wolltest Du nur die letzte Zeile um zu sehen, ob VMnet8 zu einem bestimmten Zeitpunkt vorhanden ist würde ich schon eher vermuten wo Du hin willst, aber da ist nirgendwo ein Timestamp oder ein anderer Zähler – wie willst Du da irgendeine Beobachtung machen können?

Und das Ding schreibt ewig eine einzelne Datei ACQ.log voll.

und an die Konfig von VMnet8 kommst Du so niemals heran, weil der FInd Befehl ausschließlich die Zeilen durchlässt, die den Text VMNet8 enthalten, die nachfolgenden Zeilen mit der IP Konfig von VMNet8 schluckt er weg.

Unterm Strich ergibt sich damit ein Programm, das Speicherplatz auf der Festplatte verplempert, so lange VMWare installiert ist. Immerhin unter Zuhilfenahme von UNIX Tools. Ist es das was Du möchtest?

Wie wärs wenn Du beschreibst, was die Batch eigentlich tun soll?

Gruss Armin.

Hallo Armin,

danke für Dein Interesse.

Mir geht es eigentlich nur um die smarteste Anwendung der Tail-Find-Tee Befehle.

Was letztendlich passieren soll: Auf weltweit verteilten Systemen laufen ziemlich hochwertige Programme. Diese Programme schreiben Log-Files. Für das Beobachten von Deutschland aus möchte ich o. g. Befehle einsetzen (mit Tail alleine mache ich das schon). Tail wegen dem Beobachten an sich. Find, da unglaublich viel Zeilen geschrieben werden, die mit dem aktuellen Problem nichts zu haben und mit Find kann ich dann ein Match definieren, sodass nur die gewünschte Zeile rausgefischt wird. Tee, damit ich die flüchtige Beobachtung für spätere Analysen habe. Das „Ewig“ ist nicht wörtlich zu nehmen.

Da das Konstrukt zum Feststellen von Fehlverhalten eingesetzt werden soll, brauche ich natürlich auch eine letzte Meldung, wenn es denn eine gibt. Kurze Erklärung, es treten sporadisch Fehler auf. Dann Anzeige im DOS-Fenster. Wenn jetzt nicht sichergestellt ist, dass alle Zeilen durch das Konstrukt kommen, weiß ich eben nicht, ob wieder ein Fehlerfall aufgetreten ist und kann es nicht einsetzen.

Das - zugegebenermaßen - dümmliche Beispiel habe ich nur zum Testen genutzt.

Danke im Voraus.

MfG

AL

Ho AL,

jetzt wirds einw enig klarer, ich habe mich vom Beispiel ablenken lassen.

Standardproblem bei Text-Pipes ist - ohne dass ich das jetzt prüfen kann - dass die letzte Zeile in einigen oder allen Quelldateien möglicherweise nicht mit einem CR/LF Zeichen abgeschlossen wird, oder dass da ein CR/LF kommt, und eine Komponente in der Pipeline ein letztes CR/LF als Leerzeile dahinter interpretiert, dann wäre das Deine fehlende 10. Zeile, die Du, weil sie leer ist, dann nicht sehen könntest.

Da ich das jetzt nicht nachbauen mag, musst Du das selber erforschen, aber ich würde mich wundern wenn das Problem nicht hier zu finden wäre. Was am Ende der Logdatei kommt kannst Du in einer Kopie der Datei mit einem Hex Editor nachsehen, und dann testweise ein eventuelles letztes CR/LF auch mal durch Hex 20 (Space) ersetzen, um es zu neutralisieren. Es wäre auch möglich, dass nur CR oder nur LF erwartet wird, oder dass CR/LF fehlt, und ein Programm in der Pipeline daher die letzte Zeile nicht mehr anschaut, weil es denkt, dass da noch was kommt, weil kein Endezeichen gekommen ist.

Die Welt hat sich leider nie auf einen verbindlichen Standard geeinigt, wie Zeilenenden auszusehen haben.

Deine Chancen auf einen reibungslosen Ablauf der Pipe wären eventuell auch höher, wenn Du statt die Welten zu mischen in der UNIX Welt bleibst mit Deiner Batch statt WIndows „Find“ UNIX „Grep“ eine Chance gibst. Dinge über Betriebssystemgrenzen hinweg schieben führt idR zu größerer Wahrscheinlichkeit, zwischen solchen Stühlen zu landen.

Ich persönlich rate - aus diesem und ganz vielen weiteren guten Gründen - jedem der es hören will davon ab, mit diesem Shell-Quatsch (meine Meinung) seine Zeit zu verplempern. Alleine die Fehlersuche ist ein Albtraum, und sobald man auch nur die geringste „Spezialanforderung“ hat wirds sofort unglaublich kompliziert. Eventuell gibt es dann weitere Pipe-Tools, mit denen man dagegen halten kann, aber der Aufwand fürs austüfteln und testen ist - auch mangels jeder vernünftigen Debug Umgebung - einfach nur noch absurd.

WSH, Powershell, Visual Studio Express (VB oder C#) sind alles gratis Umgebungen (Windows, für alle gibt es auch mindestens eine Gratis-Entwicklungsumgebung incl. Debugger), in denen man solche Anforderungen mit einem Bruchteil des Aufwands realisieren kann, und der Aufwand, so viel Basics einer dieser Sprachen zu lernen dass man damit ein paar Textzeilen beackern kann ist deutlich geringer, als mit x kryptischen Pipe-Tools an den Daten herumzudoktern, und dann an Trivialitäten wie einem uneinheitlichen Zeilenende-Zeichen zu scheitern.

Gruss Armin.