John Doe wrote:
Andrej Kastrin am Mittwoch, 18. Januar 2006 10.49:
Dear Perl users,
what's the best way to transform column table in row format. I know how
to split each line according to delimiter and than put it separately
into array, but I have more complicated problem (with multiple equal
records in the first column)
id001 text1
id001 text2
id001 text3
id002 text23
id002 text555
id003 text666
and want something like:
id001 text1 text2 text3
id002 text23 text 555
id003 text666
Ok, in addition to my apologies, I present here the script I described in my
last post.
In constrast to the other presented solutions using a a hash slurping all data
from the intput file, the advantage of my solution is that it is
*capable to handle 300GB input files* even with 128MB RAM.
===
#!/usr/bin/perl
use strict;
use warnings;
# open input file here if source is not <DATA>
open (my $outf, '>', './andrey_kastrin.out.txt')
or die "Can't open file: $!";
my $old_name='';
while (<DATA>) {
chomp;
my ($name, $value)=$_=~/^([\w]+)\s+(.*)$/;
if ($old_name ne $name) {
print $outf "\n" if $old_name;
print $outf $_;
}
else {
print $outf ' ',$value;
}
$old_name=$name;
}
close $outf or die "Can't close file: $!";
# close input file here if source is not <DATA>
__DATA__
id001 text1
id001 text2
id001 text3
id002 text23
id002 text555
id003 text666
===
It outputs:
id001 text1 text2 text3
id002 text23 text555
id003 text666
I'm a nice guy, see?
joe
many many thanks forall suggestions...
Cheers, Andrej
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>