Mailinglist Archive: opensuse-de (4731 mails)

< Previous Next >
Ausgabe manipulieren / bash Problem? / awk Problem?
  • From: Marc Schiffbauer <marc.schiffbauer@xxxxxxxxxxxxxx>
  • Date: Sun, 1 Jul 2001 13:13:02 +0200
  • Message-id: <20010701131302.A8212@xxxxxxxxxxxxxxxxxxxxx>
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    |


< Previous Next >