Isso criará um relatório para um único mês:
#!/usr/bin/perl
use strict;
use warnings;
@ARGV == 1 || die($!);
my $realpath = 'realpath $ARGV[0]';
chomp($realpath);
opendir(my $dir, $realpath) || die($!);
my @files;
while(readdir($dir)) {
-f "$realpath/$_" && push(@files, "$realpath/$_");
}
print("year\tmonth\tday\to-c\tmean\trms\n");
my @realpath_s = split("/", $realpath);
foreach my $file (sort(@files)) {
open(my $in, $file) || die($!);
while(<$in>) {
if(/^\s*Mean/) {
my @row;
for(my $i = 0; $i < 3; $i++) {
my @F = split(/\s/);
push(@row, $F[2]);
$_ = <$in>;
}
$_ = <$in>;
my @F = split(/\s/);
if($F[1] == 8) {
$file =~ s/.*day//;
print("$realpath_s[@realpath_s-2]\t$realpath_s[@realpath_s-1]\t$file\t$row[2]\t$row[0]\t$row[1]\n");
last;
}
}
}
}
print("\n=======================\n");
exit 0;
Salve-o em, digamos, ~/script.pl
e chame-o passando o caminho para os relatórios de um mês:
perl ~/script.pl /path/to/2015/12
A saída será impressa no terminal; você pode usar um redirecionamento para redirecioná-lo para um arquivo:
perl ~/script.pl /path/to/2015/12 > ~/report_2015_12.txt
Deve ser bastante fácil escrever várias chamadas em um script Bash para criar relatórios anuais / de 10 anos.
% tree
.
├── 2015
│ └── 12
│ ├── day1
│ ├── day2
│ └── day3
└── script.pl
2 directories, 4 files
% perl script.pl 2015/12
year month day o-c mean rms
2015 12 1 1612.97456 -78.6 1615
2015 12 2 1612.97456 -79.6 1615
2015 12 3 1612.97456 -80.6 1615
=======================
No exemplo, todos os arquivos em 2015/12
contêm uma linha iteration 8
, portanto, uma linha é impressa para cada um deles.