Bryan Harris wrote:
>
> I'm interested in doing the equivalent of a horizontal "cat" on a bunch of
> files. That is, instead of listing them one after another, I'd like them
> "cat"ted next to each other horizontally (tab separated).
>
>
> % hcat t1 t2 t3
> 0 10 15 20
> 1 11 21
> 2 12
> 13
> 14
>
> I'd like it to be able to work on any number of files, and they might be
> huge (20+ MB). I was thinking it'd be good to open up all the files at
> once, and write out the new file one line at a time, but I can't figure
> out how to set up an array of filehandles. I'm not sure if that's the
> easiest way...
>
you could open the file one by one, store its file handle, iterate through
the file handle and print the line one by one:
#!/usr/bin/perl -w
use strict;
use Symbol;
my @fds = ();
for(@ARGV){
my $fd = Symbol::gensym();
open($fd,$_) || die $!;
push(@fds,$fd);
}
while(1){
my $finish = 0;
for(@fds){
my $line = <$_>;
unless(defined $line){
$line = '';
$finish++;
}
chomp($line);
substr($line,15) = '' if(length($line)>15);
$line .=' 'x(15-length($line)) if(length($line)<15);
print $line," ";
}
print "\n";
last if($finish == $#fds);
}
close($_) for(@ARGV);
__END__
given:
file1.txt:
file1 line1
file1 line2 longer than usual
file1 line3 shorter
file2.txt:
file2 line1
file2 line2
file2 line3
file2 line4
file2 line5
file3.txt:
file3 line1
the script prints:
file1 line1 file2 line1 file3 line1
file1 line2 lon file2 line2
file1 line3 sho file2 line3
file2 line4
i put in some simple formatting code to help you see the result better.
david
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]