我有一个读取单个文件的 while 循环:
my %MyItems = ();
while (my $line = <>)
{
chomp $line;
if ($line =~ m/(.* $mon $day) \d{2}:\d{2}:\d{2} $year: ([^:]+):backup:/)
{
my $BckupDate="$1 $year";
my $BckupSet =$2;
$MyItems{$BckupSet}->{'MyLogdate'} = $BckupDate;
$MyItems{$BckupSet}->{'MyDataset'} = $BckupSet;
if ($line =~ m/(ERROR|backup-size|backup-time|backup-status)[:=](.+)/)
{
my $BckupKey=$1;
my $BckupVal=$2;
$MyItems{$BckupSet}->{$BckupKey} = $BckupVal;
}
}
}
脚本像这样执行,将日志文件作为参数传递:
./hashtst3.pl /var/log/server1.log
我对这个脚本的下一个进展是:
1-read more than 1 log file
2-store the hostname of where the logfile is from
3-eventually print this data out with the other hashes
我会将这些信息存储在单独的文本文件中以供读取吗?我会为此使用哈希吗?
server1 /var/log/server1.log
server2 /var/log/server2.log
server3 /var/log/server3.log
...
这是我的打印声明:
#Final print format
print "### Verify Final Output\n";
for my $PrintItems (sort keys %MyItems)
{
my %PrintVal = %{$MyItems{$PrintItems}};
for my $PrintKey (sort keys %PrintVal)
{
printf "%s=>%s;\n", $PrintKey, $PrintVal{$PrintKey};
}
print "\n";
}
这是我在添加引用 {$server} 的代码时的输出:
### Verify Final Output
abc2.cfl.mil.mad=>HASH(0x9da338c);
abc3.mil.mad=>HASH(0x9e20708);
abc4.mad_lvm=>HASH(0x9e20660);
abc1.mil.mad=>HASH(0x9e20774);
backup-size=>187.24 GB;
backup-status=>Backup succeeded;
backup-time=>01:54:27;
backup-size=>46.07 GB;
backup-status=>Backup succeeded;
backup-time=>00:41:06;
backup-size=>422.99 GB;
backup-status=>Backup succeeded;
backup-time=>04:48:50;
使用 dumper 为每个帮助添加当前输出:
$VAR1 = 'server1';
$VAR2 = {
'abc1.mil.mad' => { 'ERROR' => ' Error mesg here',
'MyLogdate' => 'Fri Aug 06 2010',
'MyDataset' => 'abc1.mil.mad'
},
'abc2.cfl.mil.mad' => {
'backup-size' => '187.24 GB',
'MyLogdate' => 'Fri Aug 06 2010',
'backup-status' => 'Backup succeeded',
'backup-time' => '01:54:27',
'MyDataset' => 'abc2.cfl.mil.mad'
},
'abc3.mil.mad' => {
'backup-size' => '46.07 GB',
'MyLogdate' => 'Fri Aug 06 2010',
'backup-status' => 'Backup succeeded',
'backup-time' => '00:41:06',
'MyDataset' => 'abc3.mil.mad'
},
'abc4.mad_lvm' => {
'backup-size' => '422.99 GB',
'MyLogdate' => 'Fri Aug 06 2010',
'backup-status' => 'Backup succeeded',
'backup-time' => '04:48:50',
'MyDataset' => 'abc4.mad_lvm'
}
我要打印的示例输出:
MyHost=>Server1;MyDataset=>abc2.cfl.mil.mad;MyLogdate=>Fri Aug 06 2010;backup-size=>187.24 GB;backup-status=>Backup succeeded;backup-time=>01:54:27;