Teile von STDIN in Datei umleiten
Hallo liebe Gruppe :-)
Ich stehe wie der sprichwörtliche Ochs vorm Berg und frage mich, ob ich=
soviel verlernt oder noch nie was kapiert habe. Folgendes Szenario: Ich
habe ein Programm, das mir etliche Daten auf dem Bildschirm ausgibt und
von denen ich gerne einige schön formatiert in einer Datei hätte. Als=
o
dachte ich einfach ein Perl-Skript (mein erstes seit Jahren) schreiben
und es in einer Pipe aufrufen:
programm | ./skript.pl
Ich benutze bash, MacOSX 10.4.6 und perl 5.8.6 und dachte folgendes
Skript schreibt mir die interessante Information in eine Datei, aber ich =
habe immer nur eine leere Datei. Der reguläre Ausdruck stimmt, d.h. wen=
n
ich 'print "$1"."\n";' schreibe bekomme ich die entsprechende und
korrekte Ausgabe auf dem Schirm.
Kann mir jemand sagen, welchen blöden Fehler ich gemacht und übersehe=
n habe?
Mit bestem Dank
Martin
#!/usr/bin/perl -w
$line =3D <>;
open (OUT,">kinetic.dat");
while ( $line ne "" ) {
if ( $line =3D~ /T: *(\d*\.\d*)/ ) {
print OUT "$1"."\n";
}
print ($line);
$line =3D <>;
}
close(OUT);
Re: Teile von STDIN in Datei umleiten
Martin Buchmann <Martin.Buchmann [at] uni-jena.de> writes:
> [...] Kann mir jemand sagen, welchen blöden Fehler ich gemacht und
> übersehen habe?
>
> #!/usr/bin/perl -w
>
> $line = <>;
>
> open (OUT,">kinetic.dat");
>
> while ( $line ne "" ) {
> if ( $line =~ /T: *(\d*\.\d*)/ ) {
> print OUT "$1"."\n";
> }
> print ($line);
>
> $line = <>;
> }
>
> close(OUT);
Du hast uns nicht verraten, welches Verhalten du von deinem Programm
erwartest. Wenn ich hier
lala
T: 14.15
jaja
in das Programm füttere, dann steht in kinetic.dat anschließend 14.15.
Zeig mal deine Eingabedaten.
Peter
P.S.:
>Organization: [...] Institut für Materwisschenschaft
Fällt das nicht unters Folterverbot? ;-)
--
Dipl.-Ing. Peter Ehrenberg Tel.: +49 40 756604-40
Auf der Höhe 29 Netz: http://dipe.de/
21109 Hamburg Perl · Oracle · Linux · Netzwerk
Germany Softwareentwicklung · Installation · Administration
Re: Teile von STDIN in Datei umleiten
Hallo nochmal,
Martin Buchmann said the following on 30.05.2006 15:16 Uhr:
> Ich stehe wie der sprichw=C3=B6rtliche Ochs vorm Berg und frage mich, o=
b ich
> soviel verlernt oder noch nie was kapiert habe. Folgendes Szenario: Ich=
> habe ein Programm, das mir etliche Daten auf dem Bildschirm ausgibt und=
> von denen ich gerne einige sch=C3=B6n formatiert in einer Datei h=C3=A4=
tte. Also
> dachte ich einfach ein Perl-Skript (mein erstes seit Jahren) schreiben =
> und es in einer Pipe aufrufen.
Das klappt auch, allerdings enth=C3=A4lt die Datei erst die Informationen=
,
die ich wollte, wenn mein Programm fertig ist und das dauert eben 15
Minuten :-) Ich habe mal kurz an so was gedacht, aber es mangels
Hintergrundwissen =C3=BCber Pipes, Prozesse, usw. als unwahrscheinlich
abgetan und dachte der Fehler liegt in meinen =E2=80=9EPerl-K=C3=BCnsten=E2=
=80=9C begr=C3=BCndet ;-)
Wenn mir dazu jemand einen Tipp geben kann, wie ich simultane Ausgaben
erzeugen kann, bzw was erkl=C3=A4ren kann/will, bin ich jederzeit Ohr.
Gru=C3=9F
Martin
Re: Teile von STDIN in Datei umleiten
Martin Buchmann wrote:
>>ein Perl-Skript (mein erstes seit Jahren)
Ja, das sieht man.
> Wenn mir dazu jemand einen Tipp geben kann, wie ich simultane Ausgaben
> erzeugen kann, bzw was erklären kann/will, bin ich jederzeit Ohr.
$ perldoc -q unbuffer
Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Re: Teile von STDIN in Datei umleiten
Hallo Peter,
> in das Programm füttere, dann steht in kinetic.dat anschließend 14.=
15.
Ja, inzwischen bei mir auch :-) (siehe mein anderes Posting)
>> Organization: [...] Institut für Materwisschenschaft
>
> Fällt das nicht unters Folterverbot? ;-)
Wahrscheinlich schon, da sieht man mal was man so gedankenlos für Fehle=
r
einbaut, die jahrelang unentdeckt bleiben ;-)
Gruß
Martin
Re: Teile von STDIN in Datei umleiten
Hallo Frank,
Frank Seitz said the following on 30.05.2006 15:49 Uhr:
>> Wenn mir dazu jemand einen Tipp geben kann, wie ich simultane Ausgaben=
>> erzeugen kann, bzw was erklären kann/will, bin ich jederzeit Ohr.
>
> $ perldoc -q unbuffer
Vielen Dank, werde ich mir angucken!
Martin
Re: Teile von STDIN in Datei umleiten
Martin Buchmann wrote:
> Ich benutze bash, MacOSX 10.4.6 und perl 5.8.6 und dachte folgendes
> Skript schreibt mir die interessante Information in eine Datei, aber ich
> habe immer nur eine leere Datei. Der reguläre Ausdruck stimmt, d.h. wenn
> ich 'print "$1"."\n";' schreibe bekomme ich die entsprechende und
> korrekte Ausgabe auf dem Schirm.
Also bei mir funktioniert es:
helmut [at] xp2400:$ cat test.txt
T: 123.123
sdasd
dgf
t: 345.345
helmut [at] xp2400:$ cat test.txt | perl ./test.pl
T: 123.123
sdasd
dgf
t: 345.345
Use of uninitialized value in string ne at ./test.pl line 13, <> line 5.
helmut [at] xp2400:$ cat kinetic.dat
123.123
helmut [at] xp2400:$ perl -v
This is perl, v5.8.8 built for i486-linux-gnu-thread-multi
[...]
helmut [at] xp2400:/home-work/wording/d-i-perl$ uname -a
Linux xp2400 2.6.16-1-k7 #2 Thu May 4 18:35:10 UTC 2006 i686 GNU/Linux
Von der Übersichtlichkeit her würd ich es eher so schreiben:
#!/usr/bin/perl -w
open (OUT,">kinetic.dat");
while ( my $line = <> ) {
if ( $line =~ /T: *(\d*\.\d*)/ ) {
print OUT "$1"."\n";
}
if ( $line !~ /^$/ ) {
print ($line);
}
}
close(OUT);
Dann funktioniert es, und das Warning ist auch weg.
Helmut Wollmersdorfer