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