Ausgabe manipulieren / bash Problem? / awk Problem?
Hallo Leute, Ich moechte die Ausgabe von cdda2wav fuer ein Shell-Script manipulieren. Befehl: # cdda2wav -v255 -g -B -D/dev/scd2 -N Der bewirkt, dass cdda2wav -v verbose ist, -g gui freundlich(er) -B bulk, alle Audiostuecke einzeln ausliest -D CD reader -N *nichts* auf die Platte schreibt (fuer diesen test hier) dabei benutzt cdda2wav returns (\r) um die Zeile mit der Prozent-Statusanzeige aufzufrischen: [...] 1/ 1/ 1/ 0 28% <-- cdda2wav bleibt bei einem Track immer in der selben Zeile [...] soweit so gut. Fuer mein Script moechte ich nun, dass cdda2wav fuer alles eine *neue* Zeile beginnt, bzw. den output entsprechend aendern. Das bekommt man mit "tr" hin: # cdda2wav -v255 -g -B -D/dev/scd2 -N 2>&1 | tr '[:cntrl:]' '\n' vorher muss man noch stderr nach stdout umleiten, damit die Ausgabe mit durch die Pipe geht (2>&1). So ist die Ausgabe fuer mich ok, die Daten werde *continuierlich* angezeigt. Diese Ausgabe muss ich nun on-the-fly weiter aufbereiten. Dafuer bietet sich awk an. Ein stark vereinfachtes Beispiel sollte so aussehen: # cdda2wav -v255 -g -B -D/dev/scd2 -N 2>&1 \ | tr '[:cntrl:]' '\n' | awk '{ print }' Damit habe ich das Problem aber shcon irgendwie eingebaut: Zuerst dauert es sehr lange, bis ueberhaupt etwas ausgegeben wird, obwohl die ersten paar Zeilen "normale" Zeilen sind: ------------- 86016 bytes buffer memory requested, 4 buffers, 8 sectors #Cdda2wav version 1.9_linux_2.4.3_i686_i686 real time sched. soundcard support Tracks:15 75:10.50 CDINDEX discid: eelMM4vs8miKJxZSzzQ4dm_hHJc- ------------- und die Ausgabe kommt nur noch "schubweise" an, das heisst, es kommen immer ein paar Zeilen, dann eine pause (ca. 1-2 sek), dann kommt wieder was, dann wieder pause... Woran liegt das? Wie kann ich erreichen, dass die Zeilen *continuierlich* ankommen? Wenn ich die Ausgabe in eine Dastei umlenke, und spaeter mit awk nachbearbeite, gibt es diese Verzoegerungen nicht. Das es bei # cdda2wav -v255 -g -B -D/dev/scd2 -N 2>&1 \ | awk '{ gsub("\r","\n"); print }' eine Verzoegerung gibt ist ja AFAIK klar, weil die Anzeige eines ganzen Tracks dann als *eine* Zeile angesehen wird, weil eben ja nur ein newline vorkommt, und awk deshalb alles abarbeitet, wenn der naechste Track drankommt (da gibt cdda2wav ja dann ein newline aus) Ich hoffe ich habe mich nicht zu unklar ausgedruckt, und hoffe *sehr* dass mir jemand einen Tipp geben kann. Danke Gruss -Marc -- | ...and don't forget: Linux rulez! | | | | http://www.links2linux.de <-- Von Linux-Usern fuer Linux-User |
* On Sun, Jul 01, 2001 at 01:13:02PM +0200, Marc Schiffbauer wrote:
Ich moechte die Ausgabe von cdda2wav fuer ein Shell-Script manipulieren.
So ist die Ausgabe fuer mich ok, die Daten werde *continuierlich* angezeigt.
Diese Ausgabe muss ich nun on-the-fly weiter aufbereiten. Dafuer bietet sich awk an. Ein stark vereinfachtes Beispiel sollte so aussehen:
# cdda2wav -v255 -g -B -D/dev/scd2 -N 2>&1 \ | tr '[:cntrl:]' '\n' | awk '{ print }'
Damit habe ich das Problem aber shcon irgendwie eingebaut:
Zuerst dauert es sehr lange, bis ueberhaupt etwas ausgegeben wird, obwohl die ersten paar Zeilen "normale" Zeilen sind: -------------
86016 bytes buffer memory requested, 4 buffers, 8 sectors ======================================
Hier ist dein Ansatz zum Problembehebung bzw zur Erweiterung deiner Ausgaben.
#Cdda2wav version 1.9_linux_2.4.3_i686_i686 real time sched. soundcard support Tracks:15 75:10.50 CDINDEX discid: eelMM4vs8miKJxZSzzQ4dm_hHJc- -------------
und die Ausgabe kommt nur noch "schubweise" an, das heisst, es kommen immer ein paar Zeilen, dann eine pause (ca. 1-2 sek), dann kommt wieder was, dann wieder pause...
Ja, der Buffer iss voll nehm ich ma einfach so an. Und dann kommt es naklar auch nur stossweise nachdem eben der Buffer voll ist und neu anfaengt einzulesen.
Woran liegt das? Wie kann ich erreichen, dass die Zeilen *continuierlich* ankommen?
Hm, die meissten C-Programme haben eine feste Buffergroese, was nicht immer gut ist da es fuer Angriffe missbraucht werden kann (DoS).
Wenn ich die Ausgabe in eine Dastei umlenke, und spaeter mit awk nachbearbeite, gibt es diese Verzoegerungen nicht.
Iss klar, da umgehst du den Buffer!
Ich hoffe ich habe mich nicht zu unklar ausgedruckt, und hoffe *sehr* dass mir jemand einen Tipp geben kann.
Hm, ich hoffe das es _der_ richtige Tip war *g* Du solltest versuchen den Buffer von cddawav zu umgehen.....wie du auch mit schreiben in ein file getan hast. Teste doch ob du anschl. das file mit tail auslesen kannst. Gruß Clemens -- sig_13 Kurze Sätze an eine file anhängen: [Info: man bash] Entweder: echo bla_bla >> /file oder mit EOF: $ cat <<EOF>> Datei
alles was hier geschrieben wird taucht in `Datei' auf EOF (EOF und [Enter] beendet den Analog)
* Clemens Wohld schrieb am 01.07.01 um 13:48 Uhr:
* On Sun, Jul 01, 2001 at 01:13:02PM +0200, Marc Schiffbauer wrote:
86016 bytes buffer memory requested, 4 buffers, 8 sectors
======================================
Hier ist dein Ansatz zum Problembehebung bzw zur Erweiterung deiner Ausgaben.
Das ist doch der Buffer fuer das auslesen der CD. Das hat nix mit der Ausgabe auf dem Bildschirm zu tun. Gruss -Marc -- +-O . . . o . . . O . . . o . . . O . . . ___ . . . O . . . o .-+ | Ein neuer Service von Links2Linux.de: / o\ RPMs for SuSE | | --> PackMan! <-- naeheres unter | __| and others | | http://packman.links2linux.de/ . . . O \__\ . . . O . . . O . |
Hallo Marc, On Sun, 01 Jul 2001, Marc Schiffbauer wrote:
Diese Ausgabe muss ich nun on-the-fly weiter aufbereiten. Dafuer bietet sich awk an. Ein stark vereinfachtes Beispiel sollte so aussehen:
# cdda2wav -v255 -g -B -D/dev/scd2 -N 2>&1 \ | tr '[:cntrl:]' '\n' | awk '{ print }'
[...]
und die Ausgabe kommt nur noch "schubweise" an, das heisst, es kommen immer ein paar Zeilen, dann eine pause (ca. 1-2 sek), dann kommt wieder was, dann wieder pause...
Woran liegt das? Wie kann ich erreichen, dass die Zeilen *continuierlich* ankommen?
kann das vielleicht mit der Größe der pipe-Buffers zusammenhängen? Wenn kein EOF oder so kommt, wartet die Shell eben bis der Buffer voll ist, bevor etwas weiter gegeben wird. Mach mal ein 'ulimit -a'. Bei mir kommt da: ... pipe size (512 bytes) 8 ... Eventuell hilft es, diese Größe herunter zu setzen. Gruß, Rudi -- Rudolf Elpelt EMail: elpelt@t-online.de
* Rudolf Elpelt schrieb am 01.07.01 um 14:19 Uhr:
Hallo Marc,
On Sun, 01 Jul 2001, Marc Schiffbauer wrote:
Diese Ausgabe muss ich nun on-the-fly weiter aufbereiten. Dafuer bietet sich awk an. Ein stark vereinfachtes Beispiel sollte so aussehen:
# cdda2wav -v255 -g -B -D/dev/scd2 -N 2>&1 \ | tr '[:cntrl:]' '\n' | awk '{ print }'
[...]
und die Ausgabe kommt nur noch "schubweise" an, das heisst, es kommen immer ein paar Zeilen, dann eine pause (ca. 1-2 sek), dann kommt wieder was, dann wieder pause...
Woran liegt das? Wie kann ich erreichen, dass die Zeilen *continuierlich* ankommen?
kann das vielleicht mit der Größe der pipe-Buffers zusammenhängen? Wenn kein EOF oder so kommt, wartet die Shell eben bis der Buffer voll ist, bevor etwas weiter gegeben wird. Mach mal ein 'ulimit -a'. Bei mir kommt da:
... pipe size (512 bytes) 8 ...
Hmm. Koennte sein. Aus man ulimit: -p The pipe size in 512-byte blocks (this may not be set) ^^^^^^^^ ^^^^^^^^^^ :~/ > ulimit -p 1 bash: ulimit: cannot modify limit: Das Argument ist ungültig :~/ > tja. warum das nicht klappt: keine Ahnung Ich probiere jetzt gerade, den RS (RecordSeperator) von awk zu aendern. Sieht aus, als koennte das klappen. Aber trotzdem seltsam. Trotzdem vielen Dank. Gruss -Marc -- +------------------------------------------------------------------+ | --> http://www.links2linux.de <-- Jetzt mit neuen Features! | | wie z.B. [EasyLink] | +---Registered-Linux-User-#136487------------http://counter.li.org +
Und jetzt für alle auf der Liste, nicht nur privat an Marc. Weil gerade der POP3/SMTP-Zugang nicht geht, mußte ich das Webinterface benutzen. Naja. Hallo Marc,
Aus man ulimit:
-p The pipe size in 512-byte blocks (this may not be set) ^^^^^^^^ ^^^^^^^^^^ :~/ > ulimit -p 1 bash: ulimit: cannot modify limit: Das Argument ist ungültig :~/ >
tja. warum das nicht klappt: keine Ahnung
Ich glaube, das wird in den Kernel einkompiliert. Gruß Andreas Rathgeber __________________________________________________________________ Do You Yahoo!? Gesendet von Yahoo! Mail - http://mail.yahoo.de
participants (4)
-
Andreas Rathgeber
-
Clemens Wohld
-
Elpelt@t-online.de
-
Marc Schiffbauer