in reply to Re: 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

thanks for the reply, however the out put i want is :
col1 col3 col3 1 7 77 2 8 88 3 9 99
I want the col3 side by side

Replies are listed 'Best First'.
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

    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