Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re^3: Adding a column to a file where i took out two columns

by GrandFather (Saint)
on Sep 24, 2014 at 21:25 UTC ( [id://1101875]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Adding a column to a file where i took out two columns
in thread Adding a column to a file where i took out two columns

Ok, that changes things somewhat. How about this:

#!/usr/bin/perl use warnings; use strict; my $str1 = <<STR; col1 col2 col3 1 4 7 2 5 8 3 6 9 STR my $str2 = <<STR; col1 col2 col3 1 44 77 2 55 88 3 66 99 STR open my $fIn, '<', \$str1; my $index = 0; my %fileCols = map{+"file1 $_" => $index++} split /\s+/, <$fIn>; my @file1Data; push @file1Data, [split /\s+/] while <$fIn>; close $fIn; my @wantedCols = ('col1', 'col3', 'file1 col3'); open $fIn, '<', \$str2; $index = @{$file1Data[0]}; $fileCols{$_} = $index++ for split /\s+/, <$fIn>; my @slice = map{exists $fileCols{$_} ? $fileCols{$_} : ()} @wantedCols +; print join(' ', map{(split /\s+/)[-1]} @wantedCols), "\n"; while (<$fIn>) { chomp; print join (' ', (@{$file1Data[$. - 2]}, split /\s+/)[@slice]), "\ +n"; }

Prints:

col1 col3 col3 1 77 7 2 88 8 3 99 9

Note that effectively all of the first file is read into memory to avoid having to re-read and parse it for each following file. This is fine so long as the first file is less than about half the memory you have available.

Perl is the programming world's equivalent of English

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1101875]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others scrutinizing the Monastery: (7)
As of 2024-03-28 18:56 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found