Re: shellcript
Am Dienstag, 17. Februar 2004 22:57 schrieb Joel HATSCH:
> On Tue, 17 Feb 2004 18:48:40 +0100
>
> Stefan Blechschmidt <stefan.blechschmidt@sbsbavaria.de> wrote:
> > dann ist der Weg zu perl nicht weit :-)
> >
> > ,---[ csvtostuct.pl ] ---------------------
> >
> > | #!/usr/bin/perl
> > | open (FH, "<$ARGV[0]");
> > | while (<FH>) {
> > | chomp;
> > | @inhalt = split (';', $_);
> > | system("mkdir $inhalt[0]");
> > | system("echo \"$inhalt[2]\" > $inhalt[0]/$inhalt[1]");
> > | }
> > | close(FH);
> >
> > `-----------------------------------
>
> fuktionniert prinzipiell, aber wenn ich mich richtig erinnere
> werden bei deinen 2 system()-Aufrufe jeweils shell-child-Prozesse
> gestartet. kostet Zeit.
> bei ein Paar Zeilen kein Problem, bei viele viele Aufrufe tötlich
> langsam !
> bei dem Shell-Skript hast Du eben das Problem nicht.
>
> Wie gesagt, frei aus dem Gedächtnis raus
Das ist ein tödlicher Irrtum ;-) In einem Shell-Script werden
natürlich auch für _jeden_ Befehl, der nicht Shell-Builtin ist,
Childs gestartet, also im Allgemeinen deutlich mehr als in
Perl-Programmen (Du musst ja die Zeile parsen - z. B. per cut).
Prinzipiell hast Du mit dem Einwand recht, aber Perl wäre nicht
Perl, wenn man das nicht besser lösen könnte ;-)
#!/usr/bin/perl
open (FH, "<$ARGV[0]") or die $!;
while (<FH>) {
chomp;
@inhalt = split /;/;
mkdir $inhalt[0];
open (OUT, ">" . $inhalt[0] . "/" . $inhalt[1]) or die $!;
print OUT $inhalt[2], "\n";
close OUT;
}
close(FH);
Jan
Reply to: