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 () { 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 #### device1 56, 38, 31 device2 56, 38, 31