in reply to new : greping
This is my best current guess at what you are trying to do:
use warnings; use strict; use Spreadsheet::WriteExcel; my $workbook = Spreadsheet::WriteExcel->new("data.xls"); my $worksheet = $workbook->add_worksheet(); $worksheet->write ("A1", 'Device'); $worksheet->write ("B1", '/var'); $worksheet->write ("C1", '/'); $worksheet->write ("D1", 'interleaved'); my $row = 2; #Assume data is actually on one line while (<DATA>) { my ($p1, $p2, $p3, $device) = /(?:\. ){3}(\d+)%\s\/var\s(\d+).*?(\d+ +)%\sInterleaved (\w+)/; $worksheet->write("A$row", $device); $worksheet->write("B$row", $p1); $worksheet->write("C$row", $p2); $worksheet->write("D$row", $p3); ++$row; print "$device $p1, $p2, $p3\n"; } $workbook->close (); __DATA__ 2.3.5.1 . . . 56% /var 38% / 31% Interleaved device1 Tue Sep 9 11:26: +44 ist 2005 2.3.5.1 . . . 56% /var 38% / 31% Interleaved device2 Tue Sep 5 10:26: +44 GMT 2005
Prints:
device1 56, 38, 31 device2 56, 38, 31
It pulls report lines from a file (in the sample code from the __DATA__ section), checks that the data pertains to device1, extracts the first two % values and writes those to columns A and B respectively in an Excel spreadsheet file.
Update: Updated to extract all parameters and to print collected data
|
|---|