1
2
3
4
5
6
7
8
9
10
11
12
Änderungsdatum;Größe;Dateiextension;
19.07.2009;93773;pdf;
20.07.2009;1379504;doc;
22.07.2009;1104622;xls;
21.07.2009;91915;pdf;
24.07.2009;953431;pdf;
23.07.2009;1026636;avi;
25.07.2009;1581086;mp3;
26.07.2009;93703;pdf;
28.07.2009;809489;txt;
27.07.2009;954099;mpeg;
etc...
1
2
3
4
Dateitype mpeg; 2840x vorhanden; Gesamtgröße 654368483
Dateitype doc; 234x vorhanden; Gesamtgröße 6543684
Dateitype txt; 934x vorhanden; Gesamtgröße 116543684
etc...
1
2
3
4
5
6
7
Daten Alter älter als 1 Jahr; Anzahl 64537 Dateien mit 53535464 Byte Größe
Daten Alter älter als 2 Jahr; Anzahl 64537 Dateien mit 53535464 Byte Größe
Daten Alter älter als 3 Jahr; Anzahl 64537 Dateien mit 53535464 Byte Größe
Daten Alter älter als 4 Jahr; Anzahl 64537 Dateien mit 53535464 Byte Größe
.
.
Daten Alter älter als 10 Jahre und älter; Anzahl 64537 Dateien mit 53535464 Byte Größe
QuoteWie würdet ihr hier rangehen um diese Auswertung anzufertigen?
2012-01-03T18:01:42 rostiAngesichts der Datenmenge würde ich die CSV-Datei in eine MySQL-Tabelle kopieren und darauf meine Abfragen setzen. Ggf. vor den Abfragen noch überlegen, wo ein Index die Abfrage beschleunigen könnte.
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
#!/usr/bin/perl use strict; use warnings; use Text::CSV; use Date::Parse; my $infile='datensatz.csv'; my $outfile='daten_out.txt'; # Ergebnisse. Jedes Jahr ein Arrayeintrag. my @result; # ein Jahr in Sekunden my $one_year=60*60*24*365; # für besseren Wert nutze ein Date Calc Modul # aktueller timestamp; my $now=time(); my $csv = Text::CSV->new() or die( "ERROR CSV: ".Text::CSV->error_diag()."\n" ); open(my $ifh, '<', $infile) or die("ERROR open $infile ($!)\n"); while(my $row = $csv->getline($ifh) ) { my $date=str2time($row->[0]); my $size=$row->[1]; # Modulo war Unsinn my $years=int(($now-$date)/$one_year); $result[$years]->{size}+=$size; $result[$years]->{count}++; } close($ifh); # Ausgabe: open(my $ofh, '>', $outfile) or die("ERROR open $outfile ($!)\n"); for my $year (0..$#result) { next unless($result[$year]); printf $ofh "Daten Alter älter als %u Jahr; Anzahl %u Dateien mit %u Byte Größe\n", $year, $result->{count}, $result->{size}; } close(my $ofh);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$importfile = "report_all.txt";
open (ROHDATEN, "$importfile"); #einlesen der kompletten daten
while (<ROHDATEN>) {
@feld = split (/;/, $_);
$Dateityp = lc(@feld[2]);
$Anzahl{$Dateityp} += 1;
$Groesse{$Dateityp} += @feld[1];
}
close (ROHDATEN);
foreach $Dateityp (keys %Anzahl) {
print "$Dateityp;$Anzahl{$Dateityp};$Groesse{$Dateityp}\n";
}