perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 31
Click for quality!




11.02.2012 / 16:46

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragTextdatei filtern
Seitenanfang
Hallo,
ich bräuchte ein Perlskrip, das bestimmte Zeilen aus eine Datei (lesen.log) ausliest und die Zeilen in zwei neuen Datein (treffend.txt) (nicht_treffend.txt) schreibt. Dabei sollen die Anzahl der gefundenen Zeilen am Anfag der textdatei geschrieben werden.
Es werden die Zeilen ausgefiltert und in treffend.txt geschrieben, die das Wort otto haben, die anderen Zeilen werden in nicht_treffend Datei geschrieben.

Die Datei lesen.log sieht so aus:

.
.
Oct 26 00:00:10 otto failure pattern matching 2
Oct 26 00:00:10 otto failure pattern matching 3
Oct 26 00:01:10 gostave findings: DIMMs1
Oct 26 00:01:10 gostave findings: DIMMs2
.
..

Vielen Dank im vorraus für Eure Hilfe!

Datum: 04.12.2007-11:54

Beitragre: Textdatei filtern
Seitenanfang
Hallo Romio,

sollte so funktionieren:

#!/usr/bin/perl

# das Script laeuft nur unter Windows und Linux/UNIX

use strict;
my ( $correct_counter, $not_correct_counter );

open( IN, "<lesen.log" ) or die "$!\n";
open( CORRECT, ">treffend.tmp" ) or die "$!\n";
open( NOT_CORRECT, ">nicht_treffend.tmp" ) or die "$!\n";

while( my $line = <IN> ){

if( $line =~ /\sotto\s/i ){

# otto ist vorhanden
print CORRECT $line;
$correct_counter ++;

} else {

# otto ist nicht vorhanden
print NOT_CORRECT $line;
$not_correct_counter ++;

}

}

close NOT_CORRECT;
close CORRECT;
close IN;

my $os = $^O;

if( $os =~ /win/i ){

# schreibe nicht_treffend.txt
open( CORRECT_IN, "<treffend.tmp" ) or die "$!\n";
open( CORRECT_OUT, ">treffend.txt" ) or die "$!\n";

print CORRECT_OUT "$correct_counter Eintraege gefunden\n";
print CORRECT_OUT $_ while( <CORRECT_IN> );

close CORRECT_OUT;
close CORRECT_IN;

# schreibe nicht_treffend.txt
open( NOT_CORRECT_IN, "<nicht_treffend.tmp" ) or die "$!\n";
open( NOT_CORRECT_OUT, ">nicht_treffend.txt" ) or die "$!\n";

print NOT_CORRECT_OUT "$correct_counter Eintraege gefunden\n";
print NOT_CORRECT_OUT $_ while( <NOT_CORRECT_IN> );

close NOT_CORRECT_OUT;
close NOT_CORRECT_IN;

# loeschen der tmp-files
system( "del treffend.tmp nicht_treffend.tmp" );
} else {

system( "echo $correct_counter Eintraege gefunden > treffend.txt" );
system( "cat treffend.tmp >> treffend.txt" );
system( "rm treffend.tmp" );

system( "echo $not_correct_counter Eintraege gefunden > nicht_treffend.txt" );
system( "cat nicht_treffend.tmp >> nicht_treffend.txt" );
system( "rm nicht_treffend.tmp" );

}

Gruss
TommyB

Datum: 04.12.2007-14:33

Beitragre: Textdatei filtern
Seitenanfang
Viel Dank TommyB, es hat hat super funktionert. Ich habe bitte noch eine Frage, wird das skript ohne das erstellen der temp-dateien funktionieren?

Datum: 05.12.2007-11:39

Beitragre: Textdatei filtern
Seitenanfang
Es auch, braucht aber dementsprechend Arbeitsspeicher:

#!/usr/bin/perl

use strict;
my ( @correct_list, @not_correct_list );

open( IN, "<lesen.log" ) or die "$!\n";

while( my $line = <IN> ){

if( $line =~ /\sotto\s/i ){

# otto ist vorhanden
push( @correct_list, $line );

} else {

# otto ist nicht vorhanden
push( @not_correct_list, $line );

}

}

close IN;

open( CORRECT, ">treffend.txt" );
print CORRECT $#correct_list +1 ." Eintraege gefunden\n";
foreach ( @correct_list ){
print CORRECT $_;
}
close CORRECT;

open( NOT_CORRECT, ">nicht_treffend.txt" );
print NOT_CORRECT $#not_correct_list + 1 ." Eintraege gefunden\n";
foreach ( @not_correct_list ){
print NOT_CORRECT $_;
}
close NOT_CORRECT;

Datum: 05.12.2007-12:53

Beitragre: Textdatei filtern
Seitenanfang
Hallo TommyB,
herzlichen Dank für Deine schnelle Hilfe. Die Ergebnis ist über meine Erwartung :-)
Viele Grüße,
Romio

Datum: 06.12.2007-08:56

-






-
-