#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };
my $LOAD_AT_ONCE = 500;
my $filename = shift;
open my $IN, '<', $filename or die $!;
my @part;
sub out {
for my $i (0 .. $#{ $part[0] }) {
open my $OUT, '>>', "$$.$i" or die $!;
say {$OUT} join "\n", map $_->[$i], @part;
}
@part = ();
}
while (<$IN>) {
push @part, [ split ' ' ];
out() if @part == $LOAD_AT_ONCE;
print STDERR "Phase 1: ", $IN->input_line_number, "\r";
}
out() if @part;
print STDERR "\n";
my @files = glob "$$.*";
seek $IN, 0, 0;
for my $i (0 .. $#files) {
print STDERR "Phase 2: $i\r";
open my $COL, '<', "$$.$i" or die $!;
while (<$COL>) {
chomp;
last if $_ eq 'NA';
print "$_ ";
}
my @rest = (split ' ', <$IN>)[ 1 + $i .. $#files ];
say "@rest";
}
unlink glob "$$.*";
####
my $SIZE = 1000;
sub create_matrix {
my ($filename) = @_;
open my $OUT, '>', $filename or die $!;
for my $i (1 .. $SIZE) {
for my $j ( 1 .. $SIZE ) {
print {$OUT} $i <= $j ? $i * $j : 'NA';
print {$OUT} ' ' unless $SIZE == $j;
}
print {$OUT} "\n";
}
}
####
($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord
}map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,