#!/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 = ''; # ist der "Filehandle" für __DATA__ # hier kann man vorher eine Dateinehmen und # einen beliebigen Filehandle einsetzen while( my $line = ) { # 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