Textdatei auslesen

djrick

Registered User
Hallo,

Ich benötige mal Hilfe von ein paar Bash-Könnern. Ich habe eine Textdatei in der stehen Connections zu einem meiner Streams. Ich möchte daraus auslesen wieviele Listener der Stream gerade hat. Das Problem dabei ist, dass manche Listeners "zombies" sind die in Wirklichkeit keine Daten mehr erhalten und dass in dieser Datei mehrere Streams aufgelistet sind. Alles kann man aber genau erkennen, ich brauch nur ein Batchscript dass das auswertet mit RegEx und mir die Anzahl der Zeilen ausgibt, auf die diese Bedingung zutrifft.

Ich machs mal etwas konkreter, hier ein paar Zeilen aus der betreffenden Datei:
Code:
6	stream1.mp3	123.123.123.123	HTTP/1.1	WAIT_FEED	312k	322k	107M
7	stream2.mp3	123.123.123.123	HTTP/1.1	WAIT_FEED	312k	342k	107M
8	stream1.mp3	123.123.123.123	HTTP/1.1	SEND_DATA	312k	968 	8828k
Wie man sieht besteht jede Zeile aus 8 Spalten. Zu erst eine Indexnummer, dann folgt der Name des Streams, dann eine IP des Listeners, ein HTTP Signal, "WAIT_FEED", dann die targetbitrate, dann die aktuelle bitrate und dann die Summe der übermittelten Daten.

Das Script müsste nun folgendes tun, mal im Psydocode ausgedrückt:
Nehme aktuelle Zeile,
Schaue ob "WAIT_FEED" drin vorkommt und ob Streamname = stream1.mp3 ist. Wenn aktuelle Bitrate größer als 1000 ist (also ein "k" drin vorkommt) dann ist das ein richtiger Listener.
In dem oben gezeigten Beispiel wäre also: 1 Listener das Ergebnis.

Ich denke für einen erfahrenen Bash-Scripter ist das ein Einzeiler, für mich eine unlösbare Aufgabe :)
 
Die naive Lösung wäre:
Code:
grep -e 'stream1\.mp3.*WAIT_FEED' data.txt|awk '{ print $7 }'|grep -c 'k'
Geht aber sicherlich noch eleganter.

EDIT: Zum Bleistift so:
Code:
awk 'BEGIN { lines=0 }; $2=="stream1.mp3" && $5=="WAIT_FEED" && $7~/[0-9]+k/ { lines++ }; END { print lines }' data.txt
 
Last edited by a moderator:
Back
Top