#! /usr/bin/perl # vim:ts=4 sw=4 sts=4 et nu fdc=3: use strict; use warnings; my $spalte = 3; #> Variante der Einzelverarbeitung my $summe; my $schwelle = 31.0; my $zuviele = 0; my $position = tell(DATA); # fuer demo zwecke, weil wir aus DATA Sektion lesen while ( my $zeile = ) { chomp $zeile; # hoffentlich keine Whitespaces in den Daten... my @spalten = split m{\s+}, $zeile; # verarbeite nur gewuenschte Spalte $summe += $spalten[$spalte-1]; # zaehle, wie oft $spalte die $schwelle ueberschritten hat $zuviele++ if $spalten[$spalte-1] > $schwelle; } print "Die Summe der Spalte $spalte beträgt: $summe\n"; print "Dabei waren $zuviele Werte größer als $schwelle\n"; #> Variante der Sammelverabeitung print "-------8<---------\n"; seek(DATA,$position,0); # fuer demo zwecke, weil wir aus DATA Sektion lesen; Handle-Position zuruecksetzen my %summe; my %zuviele; my %schwelle = ( # Spalten-Nr => Schwellwert 1 => 35000, 2 => 30.0, 3 => 31.0, # ... ); while ( my $zeile = ) { chomp $zeile; # hoffentlich keine Whitespaces in den Daten... my @spalten = split m{\s+}, $zeile; # verarbeite alle Spalten; Array-Index beginnt bei 0, # daher wird $idx+1 als Hash-Key genutzt, um wieder als Spaltenangabe zu dienen for my $idx ( 0 .. $#spalten ) { # Summe pro Spalte $summe{$idx+1} += $spalten[$idx]; # zaehle Schwellwertueberschreitungen pro Spalte $zuviele{$idx+1}++ if exists $schwelle{$idx+1} && $spalten[$idx] > $schwelle{$idx+1}; } } # alles ausgeben #for my $spalte ( sort keys %summe ) { # print "Die Summe der Spalte $spalte beträgt: $summe{$spalte}\n"; # if ( exists $schwelle{$spalte} && exists $zuviele{$spalte} ) { # print "Dabei waren $zuviele{$spalte} Werte größer als $schwelle{$spalte}\n"; # } #} # nur gewünschte Spalte ausgeben print "Die Summe der Spalte $spalte beträgt: $summe{$spalte}\n"; if ( exists $schwelle{$spalte} && exists $zuviele{$spalte} ) { print "Dabei waren $zuviele{$spalte} Werte größer als $schwelle{$spalte}\n"; } __DATA__ 32161 28.0 31.0 38.0 36.0 37.0 4245 1.12 1.9 32164 27.0 31.0 38.0 36.0 37.0 4245 1.12 1.9 32167 27.0 31.0 38.0 36.0 37.0 4219 1.12 1.9 32170 27.0 31.0 38.0 36.0 37.0 4219 1.12 1.9 32173 27.0 31.0 38.0 36.0 37.0 4219 1.12 1.9 32176 27.0 31.0 38.0 36.0 37.0 4219 1.12 1.9 32179 27.0 32.0 38.0 36.0 39.0 4245 1.12 1.9 32182 27.0 32.0 38.0 36.0 37.0 4245 1.12 1.9