Leser: 23
1 2
$array[7]{bytes} # 7. Datensatz, Bytes $array[7]{time} # immer noch 7. Datensatz, Time
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
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @data = (); while (<DATA>) { my $rec = {}; for ( split /\n/ ) { my @temp = split /\s/; $rec->{'time'} = $temp[0]; $rec->{'frame'} = $temp[1]; $rec->{'bytes'} = $temp[2]; } push @data, $rec; } print Dumper @data; __DATA__ 000.000-001.000 1 74 001.000-002.000 0 0 002.000-003.000 0 0 003.000-004.000 6 1300 004.000-005.000 16 3102 005.000-006.000 61 36106 006.000-007.000 5 3295 007.000-008.000 0 0 008.000-009.000 0 0 009.000-010.000 0 0 010.000-011.000 0 0 011.000-012.000 0 0
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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
#!/usr/bin/perl # strict und warnings sollten # immer Pflicht sein use strict; use warnings; # hier werden die ganzen daten gespeichert. # ich nehme ein array, damit ich die zeitliche # reihenfolge beibehalten kann. my @data; my $counter = 0; my $in_period = 0; my $last_time = ''; # <DATA> ist der "Filehandle" für __DATA__ # hier kann man vorher eine Dateinehmen und # einen beliebigen Filehandle einsetzen while( my $line = <DATA> ) { # ueberspringe die erste zeile, da sie nur # metainformationen enthaelt next if $. == 1; # entferne den zeilenumbruch chomp $line; # teile den string an den leerzeichen my ($time,$frams,$bytes) = split /\s+/, $line; # wenn daten gesendet wurden unless( $bytes == 0 ) { # und vorher keine daten gesendet wurden if( $in_period ) { # speichere die endzeit der auszeit $data[$counter]->{stop} = $last_time; # zaehle den index hoch, da jetzt eine neue # auszeit bei der nächsten 0 beginnt $counter++; } # da wieder daten gesendet wurden, bin ich # nicht mehr in der auszeit $in_period = 0; # gehe zum nächsten schleifendurchlauf next; } # da ich bei gesendeten daten vorher mit next # weitergegangen waere, bin ich jetzt auf jedenfall # in einer auszeit $in_period = 1; # setze die startzeit $data[$counter]->{start} = $time unless $data[$counter]->{start}; # eine weitere sekunde wurden keine daten gesendet $data[$counter]->{sum}++; $last_time = $time; } # gebe die ueberschriften aus, zu den formaten # siehe perldoc -f sprintf print sprintf "%20s\t%20s\t%10s\n", 'Start', 'Stop', 'Sekunden'; # fuer jede auszeit for my $entry ( @data ) { # gib die daten aus print sprintf "%20s\t%20s\t%10d\n", $entry->{start}, $entry->{stop}, $entry->{sum}; } __DATA__ Time |frames| bytes 000.000-001.000 1 74 001.000-002.000 0 0 002.000-003.000 0 0 003.000-004.000 6 1300 004.000-005.000 16 3102 005.000-006.000 61 36106 006.000-007.000 5 3295 007.000-008.000 0 0 008.000-009.000 0 0 009.000-010.000 0 0 010.000-011.000 0 0 011.000-012.000 0 0 012.000-013.000 0 0 013.000-014.000 0 0 014.000-015.000 0 0 015.000-016.000 0 0 016.000-017.000 0 0 017.000-018.000 0 0 018.000-019.000 0 0 019.000-020.000 0 0 020.000-021.000 0 0 021.000-022.000 0 0 022.000-023.000 0 0 023.000-024.000 0 0 024.000-025.000 1 74 025.000-026.000 0 0 026.000-027.000 0 0 027.000-028.000 0 0 028.000-029.000 0 0 029.000-030.000 0 0 030.000-031.000 0 0 031.000-032.000 0 0 032.000-033.000 0 0 033.000-034.000 1 833 034.000-035.000 49 29217 035.000-036.000 1 54 036.000-037.000 0 0 037.000-038.000 0 0 038.000-039.000 3 1047 039.000-040.000 12 2106 040.000-041.000 120 58336 041.000-042.000 1 54 042.000-043.000 1 74 043.000-044.000 0 0 044.000-045.000 0 0 045.000-046.000 0 0 046.000-047.000 0 0 047.000-048.000 0 0 048.000-049.000 1 74 049.000-050.000 0 0 050.000-051.000 0 0 051.000-052.000 0 0 052.000-053.000 0 0 053.000-054.000 0 0 054.000-055.000 0 0 055.000-056.000 0 0 056.000-057.000 0 0 057.000-058.000 0 0 058.000-059.000 0 0 059.000-060.000 0 0 060.000-061.000 1 74 061.000-062.000 0 0 062.000-063.000 0 0 063.000-064.000 0 0 064.000-065.000 1 72 065.000-066.000 5 837 066.000-067.000 265 169683 067.000-068.000 66 38246 068.000-069.000 16 6733 069.000-070.000 3 951 070.000-071.000 0 0 071.000-072.000 0 0 072.000-073.000 1 74 073.000-074.000 0 0 074.000-075.000 0 0 075.000-076.000 0 0 076.000-077.000 0 0 077.000-078.000 0 0 078.000-079.000 0 0 079.000-080.000 0 0 080.000-081.000 1 75 081.000-082.000 5 954 082.000-083.000 65 39896 083.000-084.000 178 98021 084.000-085.000 29 5281 085.000-086.000 0 0 086.000-087.000 2 48 087.000-088.000 0 0 088.000-089.000 0 0 089.000-090.000 0 0 090.000-091.000 0 0 091.000-092.000 14 476 092.000-093.000 2 96 093.000-094.000 2 96 094.000-095.000 11 708 095.000-096.000 1 54 096.000-097.000 0 0 097.000-098.000 7 1307 098.000-099.000 113 68332 099.000-100.000 18 13716 100.000-101.000 10 4654 101.000-102.000 2 48
1
2
3
4
5
6
7
8
9
10
11
12
13
Start Stop Sekunden
001.000-002.000 002.000-003.000 2
007.000-008.000 023.000-024.000 17
025.000-026.000 032.000-033.000 8
036.000-037.000 037.000-038.000 2
043.000-044.000 047.000-048.000 5
049.000-050.000 059.000-060.000 11
061.000-062.000 063.000-064.000 3
070.000-071.000 071.000-072.000 2
073.000-074.000 079.000-080.000 7
085.000-086.000 085.000-086.000 1
087.000-088.000 090.000-091.000 4
096.000-097.000 096.000-097.000 1
Guest bowkatzVielen Dank, hast du vielleicht eine Idee wie ich die einzelnen Nullen zwischen den anderen Zahlenwerten lesen kann, denn mit der Gesammtzeit fange ich noch nichts an. Denn wenn ich die Gesammtzeit habe brauche ich die anzahl von Unterbrechungen um auf das arithmetischemittel zu kommen z.B.
Guest bowkatz4378,8956,0,0,0,0,0,0,0,0,4326,7259,4721,0,0,0,0,usw...
dann ist die Gesammtzeit 12sec (d.h. wenn ich mit einem if alle Nullenzaehle)
Aber wie ich die einzelnen Unterbrechungen zaehlen kann ist mir ein Raetsel,denn dann ist es ein leichtes die einzelnen Werte zu addieren bzw. die Anzahl der Werte herauszufinden um den arithmetischenmittelwert zu berechnen.(glaube ich zumindest)
2009-07-08T18:08:49 RPerlAn Renee: Vielleicht kannst zum besseren Verstaendnis fuer Leute wie uns ja evtl. ein paar Kommentare in dein Programmcode schreiben. Danke.
cu
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
use strict;
use warnings;
my $data;
$data .= $_ =~ /\s0$/ ? 0 : 1 while <DATA>;
my @fail = grep $_, map{ length $_ } split /1+/, $data;
print join( ", ", @fail ) . "\n";
my $sum = 0;
$sum += $_ for @fail;
print "$sum seconds total, " . ( $sum / @fail ) . " seconds average\n";
__DATA__
000.000-001.000 1 74
001.000-002.000 0 0
002.000-003.000 0 0
003.000-004.000 6 1300
004.000-005.000 16 3102
005.000-006.000 61 36106
006.000-007.000 5 3295
007.000-008.000 0 0
008.000-009.000 0 0
009.000-010.000 0 0
010.000-011.000 0 0
011.000-012.000 0 0
$data .= $_ =~ /\s0$/ ? 0 : 1 while <DATA>;
$data .= do{ my ($i) = $_ =~ /\s(\d+)$/; $i <= 35 ? 0 : 1} while <DATA>;
$data .= ($_ =~ /\s(\d+)$/ and $1 <= 35 ? 0 : 1) while <DATA>;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
my $grenzwert = 35; my $data; while ( my $line = <DATA> ) { my( $bytes ) = $line =~ /\s(\d+)$/; if ( $bytes > $grenzwert ) { $data .= '1' } else { $data .= '0' } } my @fail; for my $ausfall ( $data =~ /(0+)/g ) { push @fail, length $ausfall; } my $summe = 0; $summe += $_ for @fail; my $mittel = $summe / @fail; print "Ausfaelle: " . join( ", ", @fail ) . "\n"; print "$summe Sekunden insg. und "; print "$mittel Sekunden im Mittel pro Ausfall\n";
qx'C:\Programme\Wireshark\Tshark -r C:\test2.pcap -z io,stat,1 ftp'
my $variable = qx'...';
while( my $line = <DATA> ) {...}
for my $line ( @alle_zeilen ) { ... }
2009-07-09T14:15:36 reneeZum aufteilen in die einzelnen Zeilen kannst Du dann split nehmen.
2009-07-09T14:43:35 pq2009-07-09T14:15:36 reneeZum aufteilen in die einzelnen Zeilen kannst Du dann split nehmen.
im listenkontext aufgerufen liefert qx schon aufgesplittete zeilen.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
my $grenzwert = 0;
my @alle_zeilen=qx'C:\Programme\Wireshark\Tshark -r C:\Test2.pcap -z io,stat,1 ftp';
my $data;
for my $line (@alle_zeilen) {
my( $bytes ) = $line =~ /\s(\d+)$/;
if ( $bytes > $grenzwert ) { $data .= '1' }
else { $data .= '0' }
}
my @fail;
for my $ausfall ( $data =~ /(0+)/g ) {
push @fail, length $ausfall;
}
my $summe = 0;
$summe += $_ for @fail;
my $mittel = $summe / @fail;
print "Ausfaelle: " . join( ", ", @fail ) . "\n";
print "$summe Sekunden insg. und ";
print "$mittel Sekunden im Mittel pro Ausfall\n";
1 2 3 4 5 6
while ( my $line = <DATA> ) { next unless $line =~ /\d{4,}\.\d{3}-\d{4,}\.\d{3}/; my( $bytes ) = $line =~ /\s(\d+)$/; if ( $bytes > $grenzwert ) { $data .= '1' } else { $data .= '0' } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
my $grenzwert = 0;
my @alle_zeilen=qx'C:\Programme\Wireshark\Tshark -r C:\Test2.pcap -z io,stat,1 ftp';
my $data;
for my $line (@alle_zeilen) {
next unless $line =~ /\d{4,}\.\d{3}-\d{4,}\.\d{3}/;
my( $bytes ) = $line =~ /\s(\d+)$/;
if ( $bytes > $grenzwert ) { $data .= '1' }
else { $data .= '0' }
}
my @fail;
for my $ausfall ( $data =~ /(0+)/g ) {
push @fail, length $ausfall;
}
my $summe = 0;
$summe += $_ for @fail;
my $mittel = $summe / @fail;
print "Ausfaelle: " . join( ", ", @fail ) . "\n";
print "$summe Sekunden insg. und ";
print "$mittel Sekunden im Mittel pro Ausfall\n";
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/usr/bin/perl -w
use strict;
my $grenzwert = 35;
my $data;
while ( my $line = <DATA> ) {
next unless $line =~ /\d{4,}\.\d{3}-\d{4,}\.\d{3}/;
my( $bytes ) = $line =~ /\s(\d+)$/;
if ( $bytes > $grenzwert ) { $data .= '1' }
else { $data .= '0' }
}
my @fail;
for my $ausfall ( $data =~ /(0+)/g ) {
push @fail, length $ausfall;
}
my $summe = 0;
$summe += $_ for @fail;
my $mittel = $summe / @fail;
print "Ausfaelle: " . join( ", ", @fail ) . "\n";
print "$summe Sekunden insg. und ";
print "$mittel Sekunden im Mittel pro Ausfall\n";
__DATA__
1 0.000000 84.20.188.80 -> 194.48.124.202 DNS Standard query A www.perl-community.de
2 0.500000 194.48.124.202 -> 84.20.188.80 DNS Standard query response A 92.51.163.38
3 0.500000 84.20.188.80 -> 92.51.163.38 TCP 4808 > http [SYN] Seq=0 Win=65535 Len=0 MSS=1424 TSV=0 TSER=0
4 0.906250 92.51.163.38 -> 84.20.188.80 TCP http > 4808 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1424
5 0.906250 84.20.188.80 -> 92.51.163.38 TCP 4808 > http [ACK] Seq=1 Ack=1 Win=65535 Len=0
6 0.906250 84.20.188.80 -> 92.51.163.38 HTTP GET /bat/poard/thread/13706 HTTP/1.1
7 1.828125 92.51.163.38 -> 84.20.188.80 TCP http > 4808 [ACK] Seq=1 Ack=511 Win=6432 Len=0
8 2.609375 92.51.163.38 -> 84.20.188.80 TCP [TCP segment of a reassembled PDU]
9 2.625000 92.51.163.38 -> 84.20.188.80 TCP [TCP segment of a reassembled PDU]
10 2.625000 84.20.188.80 -> 92.51.163.38 TCP 4808 > http [ACK] Seq=511 Ack=1952 Win=65535 Len=0
11 2.656250 84.20.188.80 -> 92.51.163.38 TCP 4809 > http [SYN] Seq=0 Win=65535 Len=0 MSS=1424 TSV=0 TSER=0
12 2.656250 84.20.188.80 -> 92.51.163.38 TCP 4810 > http [SYN] Seq=0 Win=65535 Len=0 MSS=1424 TSV=0 TSER=0
13 2.656250 84.20.188.80 -> 92.51.163.38 TCP 4811 > http [SYN] Seq=0 Win=65535 Len=0 MSS=1424 TSV=0 TSER=0
14 2.656250 84.20.188.80 -> 92.51.163.38 TCP 4812 > http [SYN] Seq=0 Win=65535 Len=0 MSS=1424 TSV=0 TSER=0
15 2.656250 84.20.188.80 -> 92.51.163.38 TCP 4813 > http [SYN] Seq=0 Win=65535 Len=0 MSS=1424 TSV=0 TSER=0
16 2.703125 92.51.163.38 -> 84.20.188.80 TCP [TCP segment of a reassembled PDU]
17 2.718750 92.51.163.38 -> 84.20.188.80 TCP [TCP segment of a reassembled PDU]
18 2.718750 84.20.188.80 -> 92.51.163.38 TCP 4808 > http [ACK] Seq=511 Ack=4800 Win=65535 Len=0
19 2.718750 92.51.163.38 -> 84.20.188.80 TCP [TCP segment of a reassembled PDU]
20 2.734375 92.51.163.38 -> 84.20.188.80 TCP http > 4809 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1424
21 2.734375 84.20.188.80 -> 92.51.163.38 TCP 4809 > http [ACK] Seq=1 Ack=1 Win=65535 Len=0
22 2.734375 84.20.188.80 -> 92.51.163.38 HTTP GET /battie/theme/default/layout.css HTTP/1.1
23 2.750000 92.51.163.38 -> 84.20.188.80 TCP http > 4810 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1424
24 2.750000 84.20.188.80 -> 92.51.163.38 TCP 4810 > http [ACK] Seq=1 Ack=1 Win=65535 Len=0
25 2.750000 84.20.188.80 -> 92.51.163.38 HTTP GET /battie/theme/default/color.css HTTP/1.1
26 2.750000 92.51.163.38 -> 84.20.188.80 TCP http > 4811 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1424
27 2.750000 84.20.188.80 -> 92.51.163.38 TCP 4811 > http [ACK] Seq=1 Ack=1 Win=65535 Len=0
28 2.750000 84.20.188.80 -> 92.51.163.38 HTTP GET /battie/theme/default/poard.css HTTP/1.1
29 2.781250 92.51.163.38 -> 84.20.188.80 TCP http > 4812 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1424
30 2.781250 84.20.188.80 -> 92.51.163.38 TCP 4812 > http [ACK] Seq=1 Ack=1 Win=65535 Len=0
31 2.781250 92.51.163.38 -> 84.20.188.80 TCP http > 4813 [SYN, ACK] Seq=0 Ack=1 Win=5840 Len=0 MSS=1424
32 2.781250 84.20.188.80 -> 92.51.163.38 TCP 4813 > http [ACK] Seq=1 Ack=1 Win=65535 Len=0
33 2.781250 84.20.188.80 -> 92.51.163.38 HTTP GET /battie/theme/default/source-highlight.css HTTP/1.1
34 2.781250 84.20.188.80 -> 92.51.163.38 HTTP GET /battie/js/bbcode_buttons.js HTTP/1.1
35 2.781250 92.51.163.38 -> 84.20.188.80 TCP [TCP segment of a reassembled PDU]
36 2.781250 84.20.188.80 -> 92.51.163.38 TCP 4808 > http [ACK] Seq=511 Ack=7648 Win=65535 Len=0
37 2.796875 92.51.163.38 -> 84.20.188.80 TCP [TCP segment of a reassembled PDU]
38 2.796875 92.51.163.38 -> 84.20.188.80 TCP [TCP segment of a reassembled PDU]
39 2.796875 84.20.188.80 -> 92.51.163.38 TCP 4808 > http [ACK] Seq=511 Ack=10496 Win=65535 Len=0
40 2.828125 92.51.163.38 -> 84.20.188.80 TCP http > 4809 [ACK] Seq=1 Ack=544 Win=6516 Len=0
41 2.843750 92.51.163.38 -> 84.20.188.80 HTTP HTTP/1.1 304 Not Modified
42 2.843750 92.51.163.38 -> 84.20.188.80 TCP http > 4810 [ACK] Seq=1 Ack=540 Win=6468 Len=0
43 2.859375 92.51.163.38 -> 84.20.188.80 HTTP HTTP/1.1 304 Not Modified
44 2.859375 92.51.163.38 -> 84.20.188.80 TCP http > 4811 [ACK] Seq=1 Ack=543 Win=6504 Len=0
45 2.859375 92.51.163.38 -> 84.20.188.80 HTTP HTTP/1.1 304 Not Modified
46 2.875000 92.51.163.38 -> 84.20.188.80 TCP http > 4812 [ACK] Seq=1 Ack=553 Win=6624 Len=0
47 2.875000 92.51.163.38 -> 84.20.188.80 HTTP HTTP/1.1 304 Not Modified
956601 1259.578125 Send_08 -> Send_08 PPP LCP Termination Request
956602 1259.578125 Receive_08 -> Receive_08 PPP LCP Termination Ack
===================================================================
IO Statistics
Interval: 1.000 secs
Column #0:
| Column #0
Time |frames| bytes
000.000-001.000 6 979
001.000-002.000 1 54
002.000-003.000 56 26719
003.000-004.000 26 7318
004.000-005.000 0 0
005.000-006.000 0 0
006.000-007.000 0 0
007.000-008.000 0 0
008.000-009.000 0 0
009.000-010.000 0 0
010.000-011.000 3 674
011.000-012.000 100 78646
012.000-013.000 52 21535
013.000-014.000 221 48811
014.000-015.000 95 20487
015.000-016.000 7 1373
016.000-017.000 27 8583
017.000-018.000 0 0
018.000-019.000 0 0
019.000-020.000 0 0
020.000-021.000 0 0
021.000-022.000 9 486
022.000-023.000 0 0
023.000-024.000 14 756
024.000-025.000 0 0
025.000-026.000 0 0
026.000-027.000 0 0
027.000-028.000 1 54
028.000-029.000 0 0
029.000-030.000 0 0
030.000-031.000 0 0
031.000-032.000 6 324
032.000-033.000 2 48
033.000-034.000 0 0
034.000-035.000 0 0
035.000-036.000 0 0
036.000-037.000 0 0
037.000-038.000 0 0
038.000-039.000 0 0
039.000-040.000 0 0
040.000-041.000 0 0
041.000-042.000 0 0
042.000-043.000 14 476
043.000-044.000 2 96
044.000-045.000 2 96
045.000-046.000 2 96
046.000-047.000 21 1483
047.000-048.000 305 290810
048.000-049.000 820 798648
049.000-050.000 812 792200
1 2 3 4 5 6
while ( my $line = <DATA> ) { next unless $line =~ /\d{3,}\.\d{3}-\d{3,}\.\d{3}/; my( $bytes ) = $line =~ /\s(\d+)\s*$/; if ( $bytes > $grenzwert ) { $data .= '1' } else { $data .= '0' } }
1 2 3 4 5
while( ... ) { unless( $line =~ /\A\d+\.\d+-\d+\.\d+\s+\d+\s+\d+\z/ ) { next; } }
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
42
43
44
45
46
47
48
49
50
51
The regular expression:
(?-imsx:\A\d+\.\d+-\d+\.\d+\s+\d+\s+\d+\z)
matches as follows:
NODE EXPLANATION
----------------------------------------------------------------------
(?-imsx: group, but do not capture (case-sensitive)
(with ^ and $ matching normally) (with . not
matching \n) (matching whitespace and #
normally):
----------------------------------------------------------------------
\A the beginning of the string
----------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
----------------------------------------------------------------------
\. '.'
----------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
----------------------------------------------------------------------
- '-'
----------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
----------------------------------------------------------------------
\. '.'
----------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
----------------------------------------------------------------------
\s+ whitespace (\n, \r, \t, \f, and " ") (1 or
more times (matching the most amount
possible))
----------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
----------------------------------------------------------------------
\s+ whitespace (\n, \r, \t, \f, and " ") (1 or
more times (matching the most amount
possible))
----------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
----------------------------------------------------------------------
\z the end of the string
----------------------------------------------------------------------
) end of grouping
----------------------------------------------------------------------
1 2 3
open(DATA, '... |') or die "Error executing ...: $!"; while (<DATA>) { ... } close(DATA) or die "Error closing ...: $!";
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
#!/usr/bin/perl -w
use strict;
my $grenzwert = 35;
my $data;
while (<STDIN>) {
chomp;
my $line = $_;
next unless $line =~ /\d{3,}\.\d{3}-\d{3,}\.\d{3}/;
my( $bytes ) = $line =~ /\s(\d+)\s*$/;
if ( $bytes > $grenzwert ) { $data .= '1' }
else { $data .= '0' }
}
my @fail;
for my $ausfall ( $data =~ /(0+)/g ) {
push @fail, length $ausfall;
}
my $summe = 0;
$summe += $_ for @fail;
my $mittel = $summe / @fail;
print "Ausfaelle: " . join( ", ", @fail ) . "\n";
print "$summe Sekunden insg. und ";
print "$mittel Sekunden im Mittel pro Ausfall\n";
2009-07-15T08:41:51 bowkatzMeine naechste Frage ist wie ich die Ergebnisse in einer Textdatei tabellenfoermig abspeichernkann:
Ausfaelle Sekunden im Mittel Sekunden insg.
3 3 15
2
7
2
1
und das ganze am besten so das bei erneutem Ausfueren das .txt file nicht ueberschrieben wird sondern einfach an das ende der datei angehaengt wird.
mfg Bowkatz
1 2
print sprintf "%20s%20s%20s", 'test','hallo','ende'; print sprintf "%20d%20d%20d", 3, 3, 15;
open my $fh, '>', 'dateiname' or die $!;
command1 | your_script.pl
command1 | your_script.pl >> output.txt
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
#!/usr/bin/perl -w
use strict;
my $grenzwert = 35;
my $data;
while (<STDIN>) {
chomp;
my $line = $_;
next unless $line =~ /\d{3,}\.\d{3}-\d{3,}\.\d{3}/;
my( $bytes ) = $line =~ /\s(\d+)\s*$/;
if ( $bytes > $grenzwert ) { $data .= '1' }
else { $data .= '0' }
}
my @fail;
for my $ausfall ( $data =~ /(0+)/g ) {
push @fail, length $ausfall;
}
my $summe = 0;
$summe += $_ for @fail;
my $mittel = $summe / @fail;
print "Ausfaelle: " . join( ", ", @fail ) . "\n";
print "$summe Sekunden insg. und ";
print "$mittel Sekunden im Mittel pro Ausfall\n";
open $mittel, '>>', 'mittel.txt' or die $!;
2009-07-15T10:14:44 bowkatzCode: (dl )1
2
3
4
5
6my $mittel = $summe / @fail;
print "Ausfaelle: " . join( ", ", @fail ) . "\n";
print "$summe Sekunden insg. und ";
print "$mittel Sekunden im Mittel pro Ausfall\n";
open $mittel, '>>', 'mittel.txt' or die $!;
Das beschert mir aber einen Fehler :
C:\>C:\Programme\Wireshark\tshark -r C:\test2.pcap -z io,stat,1 ftp | perl stabt
est1_1.pl
Ausfaelle: 6, 4, 1, 3, 3, 9, 2
28 Sekunden insg. und 4 Sekunden im Mittel pro Ausfall
Can't use string ("4") as a symbol ref while "strict refs" in use at stabtest1_1
.pl line 28, <STDIN> line 1444.
1 2 3 4 5 6 7 8
my $mittel = $summe / @fail; print "Ausfaelle: " . join( ", ", @fail ) . "\n"; print "$summe Sekunden insg. und "; print "$mittel Sekunden im Mittel pro Ausfall\n"; open my $fh, '>>', 'mittel.txt' or die $!; print $fh "Mittel: $mittel\n"; close $fh;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/perl -w
use strict;
my $grenzwert = 35;
my $data;
printf "Please enter a filename";
my $filename=<STDIN>;
while (<STDIN>) {
chomp;
my $line = $_;
next unless $line =~ /\d{3,}\.\d{3}-\d{3,}\.\d{3}/;
my( $bytes ) = $line =~ /\s(\d+)\s*$/;
if ( $bytes > $grenzwert ) { $data .= '1' }
else { $data .= '0' }
}
my @fail;
C:\>C:\Programme\Wireshark\tshark -r C:\test2.pcap -z io,stat,1 ftp | perl stabtest1_1.pl C:\testoutput.txt
my $filename=shift(@ARGV);
C:\>C:\Programme\Wireshark\tshark -r C:\test2.pcap -z io,stat,1 ftp | perl stabtest1_1.pl > C:\testoutput.txt
Guest bowkatzC:\Programme\Wiresharktshark\tshark -r C:\test.pcap -z io,stat,1 ftp
das Problem ist das da nicht nur ein paar Zeilen kommen sondern um die 1259 pro 20 min capturefile das lässt sich natürlich nicht alles in der cmd darstellen, gibts nicht vielleicht die Möglichkeit den Befehl mit perl auszuführen und den generierten output in eine txt zu schreiben?