Schrift
[thread]9041[/thread]

Zeilenanzahl ausgeben

Leser: 2


<< >> 5 Einträge, 1 Seite
skynetworks
 2007-05-26 18:56
#76989 #76989
User since
2007-05-24
10 Artikel
BenutzerIn
[default_avatar]
Tach zusammen,

ich hätte nochmal eine kleine Frage zu einem Perl-script.

Ich möchte, dass bei dem geposteten Programm in der Ausgabedatei ganz oben ein Hinweis erscheint, wieviele Zeilen die Ausgabedatei enthält.

Hat jemand einen Tip für mich?

Danke & Gruss
Thomas

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/usr/bin/perl

use strict;
use warnings;


# Variablen definieren
my $inputfile = '/var/log/mail.log';
my $outputfile = '/opt/lampp/htdocs/greylisted.txt';


# öffne datei oder stirb
open my $fh, '<', $inputfile or die "$inputfile: $!";


# neue datei anlegen
open my $out, '>', $outputfile or die $!;


# lies zeile für zeile
while (my $line = <$fh>)
{
if ($line =~ m/\bGreylisted for 300\b/)
{
# wenn der Suchstringt vorkommt,
# schreibe in die neue datei
# nur wenn ein String nach "RCPT from" gefunden wird, wird eine Ausgabe gemacht
if ( $line =~ m/RCPT from\s*(.*?):/ )
{
print $out substr( $line, 0, 15 ) . ' : ' . $1 . $/;
}
}
}
close $fh;
close $out;
MisterL
 2007-05-26 19:42
#76990 #76990
User since
2006-07-05
334 Artikel
BenutzerIn
[default_avatar]
Hier könnte man mit CPAN:Tie::File weiterkommen. Man beachte speziell "$n_recs = @array; # how many records are in the file?"
Oder man sucht unter http://search.cpan.org nach weiteren Stichwörtern wie "lines count output file"....

Gruss MisterL
“Perl is the only language that looks the same before and after RSA encryption.”
PerlProfi
 2007-05-26 19:49
#76991 #76991
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Du könntest ja einen Array mit den Ausgabedaten erstellen, und erst am Ende rausschreiben.

Könnte dann so aussehen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/usr/bin/perl
use strict;
use warnings 'all';

# dateinamen
my $inputfile = '/var/log/mail.log';
my $outputfile = '/opt/lampp/htdocs/greylisted.txt';

# oeffne inputfile
open(my$fhin, '<', $inputfile) or die "$inputfile: $!";

# array für die ausgabe
my @output;

# lies zeile für zeile
while (my$line = <$fhin>)
{
if ($line =~ m/\bGreylisted for 300\b/)
{
# wenn der Suchstringt vorkommt,
# und "RCPT from" gefunden wird,
# wird das ausgabearray erweitert
if ( $line =~ m/RCPT from\s*(.*?):/ )
{ push(@output, substr( $line, 0, 15 ) .' : '. $1) }
}
}

# inputfile schliessen
close $fhin;

# ausgabearray bearbeiten
unshift(@output, $#output+2);

# oeffne outputfile
open(my$fhout, '>', $outputfile) or die "$outputfile: $!";

# daten rausschreiben
map { print $fhout "$_$/" } @output;

# outputfile schliessen
close $fhout;


MfG
skynetworks
 2007-05-27 01:03
#76992 #76992
User since
2007-05-24
10 Artikel
BenutzerIn
[default_avatar]
Super, funktioniert einwandfrei.

Vielen Dank nochmal!

Gruss
Thomas
renee
 2007-05-29 00:55
#76993 #76993
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
map im void Kontext finde ich sehr unschön. Ich würde statt
Code (perl): (dl )
1
2
   # daten rausschreiben
   map { print $fhout "$_$/" } @output;


lieber
Code (perl): (dl )
1
2
   # daten rausschreiben
   print $fhout "$_$/" for @output;


schreiben.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< >> 5 Einträge, 1 Seite



View all threads created 2007-05-26 18:56.