Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

stream (wie logdatei mit tail anzeigen) auswerten

Empfohlene Antworten

Veröffentlicht

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

  • Autor

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!

  • Autor

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

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 von t3quill4b0y

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.