On Tue, 2002-04-16 at 18:00, José Luis Gómez Dans wrote:
> Hi,
> A question for all you awk/sed/perl wizards out there. I have a
> file which has a number of records in the following fashion
How about:
--------------------------
#!/usr/bin/perl -w
use strict;
my $file = 'pathtofile';
open (DATA, "<$file") or die "Can't open $file";
my $finished = 0;
my @data; # global bin to put records
sub getline () { my $line = <DATA>; chomp $line if (defined $line);
return $line; }
while (!$finished) {
# Records are a hash:
# id - the identity string
# dunno - some value I couldn't work out ;)
# n - number of records
# data - arrayref to the data lines
my ($id, %record, @datarecords) = (getline);
if (! defined $id) { $finished = 1; next; }
($record{id}, $record{dunno}, $record{n}) = ($id, getline, getline);
for (my $i=0; $i<$record{n}; $i++) { push ( [at] data_records, getline); }
$record{data} = \@data_records;
push (@data, \%record);
}
close DATA;
# bang out records...
foreach my $record ( [at] data) {
open (OUTPUT, ">$record->{id}") or die "Can't write to $record->{id}";
print OUTPUT "$record->{dunno}\n$record->{n}\n";
map { print OUTPUT "$_\n"; } ( [at] {$record->{data}});
close (OUTPUT);
}
--------------------------
Golf, anyone?
Cheers,
Alex.
Attachment:
signature.asc
Description: This is a digitally signed message part