ava2k3 Geschrieben 24. September 2008 Geschrieben 24. September 2008 Hi, ich habe ein kleines Problem. Ich würde gerne einen "Stream" auswerten. Es geht dabei um eine logdatei, die dauerhaft überwacht werden soll. Weiterhin soll eine Aktion ausgeführt werden, wenn bestimmte Werte in der config einen Schwellenwert überschreiten. Der Inhalt des logs sieht ungefähr so aus: xxx xxx xxxx xxxxx xxxx stopped: 0.0001770 seconds im Endeffekt interessiert mich nur der Wert hinter "stopped:". Wenn dieser Wert z.B. über 1 sekunde geht, soll beispielsweise eine Mail geschickt werden. Das log muss aber dauerhaft ausgewertet werde, damit die Meldung zietnah kommt und nicht erst z.B. 5 Minuten nachdem es passiert ist. Ich hatte es bisher so versucht: tail -f xxx.log | grep stopped | awk '{ print $9 }' print $9 ist in meinem Fall genau die Stelle, an der die Sekunden stehen. nach stopped muss ich grepen, weil mehrer Sachen in dem Log stehen und mich nur die Zeilen interessieren in denen stopped vorkommt. Nun scheint es mir so, dass tail und awk nicht zusammen funktionieren. So wie oben geht es nämlich leider nicht. wenn ich das log statt mit tail z.B. mit cat öffne geht der awk befehl. Cat liest die datei aber leider nur 1 x ein, ich muss sie aber dauerhaft auswerten. HAt einer von euch eine idee, wie ich das besser und vielleicht auch ressourcenschonender machen kann (in meinem Beispiel benutze ich zum auswerten 3 Programme...sicher nicht optimal). Hoffe mir kann jemand helfen. Gruß ava Zitieren
ava2k3 Geschrieben 24. September 2008 Autor Geschrieben 24. September 2008 ok, ich bin jetzt soweit, dass ich rausgefunden habe, dass man sowas am besten mit regular expressions macht.. bsp. #!/bin/bash tail -f xxx.log | while read zeile; do if [[ "$zeile" =~ "stopped: 0" ]];then echo $zeile; fi done das zeigt mir alle zeilen an, in denen stoppend: 0 drin vorkommt. aaaa bbbb ccc dddd eeeee fffff ggggg stopped: 0.2609620 hhhhh mit regular expressions kenn ich mich aber kein Stück aus. Weiss einer von euch, wie [[ "$zeile" =~ "stopped: 0" ]] aussehen müsste, damit ich 1. nur die angezeigt bekomme, wo stopped nicht 0 ist (also alles größer 0) und 2. ich nur den Wert hinter stopped angezeigt bekomme (also hier in dem Beispiel: 0.2609620) ? Danke! Zitieren
ava2k3 Geschrieben 24. September 2008 Autor Geschrieben 24. September 2008 ok, auch das problem habe ich gelöst. jetzt noch ein letztes: ich überprüfe eine Variable: if [ "$GC" -gt 2.0000000 ]; then leider bekomme ich damit folgenden error: 0.0697490: integer expression expected -gt scheint also nicht mit kommazahlen klarzukommen (0.0697490). ich will quasi: wenn $GC größer als 2.0000000 ist, mache... nur das bekomme ich im mom nicht hin.. thx Zitieren
t3quill4b0y Geschrieben 24. September 2008 Geschrieben 24. September 2008 (bearbeitet) Hi, bash kann nicht mit floats rechnen, aber mir ist ne andere Lösung eingefallen, eher ein Workaround wie ne Lösung, aber sollte tun: if [ "${GC:0:1}" -ge 2 ]; then echo "Zahl Größer gleich 2" fi Das bewirkt nix anderes, wie dass nur das erste Zeichen (der rest wird quasi abgeschnitten) deiner Variable verglichen wird. Grüßle Bearbeitet 24. September 2008 von t3quill4b0y Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.