Probleme mit awk in Linux

OP #3896207
Lesenswert?

Hallo,
ich bastle mir zurzeit ein Internetradio mit meinen Beaglebone Black.
Als betriebssystem läuft Debian Wheezy (über Konsole - kein GUI).

Zurzeit wird mein Stream mittels VLC-Player wiedergegeben, und ich 
versuche den Titel mit awk herauszufiltern.
Der Output vom VLC-Player zu einen neuen Titel sieht z.B so aus:
1
[0x9e370] access_http access debug: New Title=ROCK ANTENNE - Rock Nonstop
Ich starte den VLC-Player also mit
1
vlc --intf dummy --aout alsa --alsa-audio-device=hw:1,0 -vvv http://mp3channels.webradio.antenne.de:80/rockantenne  2>&1 | awk -F= '/Title/ {print $2}'

Bis jetzt funktioniert auch alles ohne Probleme.
Der aktuell gespielte Song wird auch ohne Probleme angezeigt.

Startet jedoch der nächste Song, dann wird der Titel des neuen Songs 
nichtmehr angezeigt.
Egal wielange ich warte, und wieviele Songs gespielt werden, es kommt 
nichts...

Arbeite ich jedoch mit grep, und lasse mir die ganze Zeile ausgeben, 
dann funktioniert grep immerhin...
grep Start:
1
vlc --intf dummy --aout alsa --alsa-audio-device=hw:1,0 -vvv http://mp3channels.webradio.antenne.de:80/rockantenne  2>&1 | grep "http"
Output von Grep
1
[0x9e370] access_http access debug: New Title=Rick Springfield - Love somebody
2
[0x9e370] access_http access debug: New Title=ROCK ANTENNE - Rock Nonstop
3
[0x9e370] access_http access debug: New Title=Alanis Morissette - Guardian

Wie muss ich jetzt mein awk-Script jetzt umschreiben, dass auch alle 
weiteren Songs angezeigt werden?

Mit freundlichen grüßen
Pascal
OP #3896270
Lesenswert?

Andy D. schrieb:
> -F= scheint ein Argument zu fehlen, evtl ist das beim pasten
> verlorengegangen?

Nöp, meineswissens gebe ich mit -F meinen Fieldseperator an (in den fall 
'=')

Ich habe mich halt versucht an ein beispiel vom mplayer zu halten, 
welches bei mir auch funktioniert hat (von hier: 
http://forum.ubuntuusers.de/topic/mplayer-und-grep-problem/ ):
1
awk -F\' '/StreamTitle/ {print $2}'

Leider musste ich mich aber vom mplayer entfernen, da der StreamTitle 
vollkommen unsynchron zur Musik war...

Ich habe mittlerweile auch ein paar andere Schreibweisen mit -F 
versucht:
1
-F'=' 
2
-F"="
3
-F="="
4
-F='='
5
-F\=
keine der Kombinationen hat funktioniert.
Ich bin mittlerweile eher ratlos, und weiß nichtmehr, was ich noch 
versuchen soll...

Mit freundlichen grüßen
Pascal
Gast #3896346
Lesenswert?

man awk:

The function fflush(expr) flushes the output file or pipe associated 
with expr. Fflush returns 0 if expr is an
open output stream else −1. Fflush without an argument flushes stdout. 
Fflush with an empty argument
("") flushes all open output.
OP #3896351
Lesenswert?

Hallo,
nach mittlerweile ca. 30 Minuten wurden auf einmal alle Titel angezeigt, 
die in der zeit gespielt wurden (mit awk).
Versuche ich die awk methode mit "stdbuf -oL" oder "unbuffered" 
aufzurufen, ändert sich auch nichts.
Ein fflush() in awk ändert die sache auch nicht...

Wenn ich es mit cut versuche funktioniert noch weniger.
1
vlc --intf dummy --aout alsa --alsa-audio-device=hw:1,0 -vvv http://mp3channels.webradio.antenne.de:80/rockantenne  2>&1 | grep "New Title" | cut -d = -f 2
Dann bekomme ich noch weniger Output als mit awk. Dann wird nichtmal der 
aktuelle Name angezeigt...
"greppe" ich wiederhin nur, dann funktionierts ohne "Probleme" - es wird 
halt zu viel angezeigt...
1
vlc --intf dummy --aout alsa --alsa-audio-device=hw:1,0 -vvv http://mp3channels.webradio.antenne.de:80/rockantenne  2>&1 | grep "New Title"

Hat vielleicht noch jemand irgendwelche Tipps für mich?

Mfg
Pascal
Gast #3896365
Lesenswert?

Jetzt bin auch ich verwirrt:
1
vlc --intf dummy --aout alsa --alsa-audio-device=hw:1,0 -vvv http://mp3channels.webradio.antenne.de:80/rockantenne  2>&1  | grep 'New Title'
funktioniert wie erwartet.

Pipet man die Ausgabe von grep in irgendwas weiter:
1
vlc --intf dummy --aout alsa --alsa-audio-device=hw:1,0 -vvv http://mp3channels.webradio.antenne.de:80/rockantenne  2>&1  | grep 'New Title' | cat
kommt nichts.

WZF passiert da?
OP #3902282
Lesenswert?

Hallo,
mit:
Andy D. schrieb:
> -F '='
funktionierts auch leider nicht.
ich rufe den VLC-Player mittlerweile so auf:
1
cvlc --aout alsa --alsa-audio-device=hw:1,0 http://mp3channels.webradio.antenne.de:80/rockantenne -vvv 2>&1 | awk -F '=' '/Title/ {print $2}' > /Radio/Final/TempLog
Es wird jedoch immer nur der aktuell gespielte Titel angezeigt, und kein 
weiterer Titel.
Ein fflush() hilft leider auch nichts ->
1
... awk -F '=' '/Title/ {print $2; fflush()}' > /Radio/Final/TempLog
Ich habe auch schon folgendes getestet:
1
... 2>&1 | stdbuf -oL awk -F '=' ...
2
... 2>&1 | unbuffer awk -F '=' ...
mit grep & cut komme ich leider auch nicht weiter, da das
> --line-buffered
auch keinen unterschied macht.
Nur grep ->
1
[0x9e370] access_http access debug: New Title=ROCK ANTENNE - Rock Nonstop
Sobald ich jedoch den output von grep (egal ob mit --line-buffered oder 
unbuffer oder stdbuf -oL) weiter pipe, dann geht nichts mehr...

Letztendlich müsste der VLC-Player so funktionieren:
1
[vlc] | awk oder (grep&cut) > Datei
Also ich möchte den output vom VLC-Player filtern und in eine Datei 
umleiten. Jedoch scheitert es ja bereits beim filtern.

Im Anhang ist auch noch der ungefilterte Output vom VLC-Player wenn ich 
ihn starte und wieder schließe, nachdem der Song angefangen hat zu 
spielen.

Kennt vielleicht jemand von euch noch eine passende alternative zum VLC 
player und mplayer, um http streams in der Linux Console wiederzugeben?

Mit freundlichen grüßen
Pascal
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren