This will read whatever files you specify on the command line, and then print the first word on each line. All you need to do is change the printing lines to print what it is you actually want -- the array @filelines contains the nth line from each file. (Sorry the other solution I saw made me gag at the memory usage on large files :) -- I'm still a stickler for that).#!/usr/bin/perl -w use strict; use IO::File; my $verbose = 1; my @fh; while (my $name = shift @ARGV) { my $file = new IO::File; print "Opening $name\n" if $verbose; open ($file,$name); push @fh, $file; } my $n = 0; READ: while (++$n) { my @filelines; for my $file (@fh) { my $line = <$file> || last READ; push @filelines, $line; } # Now @filelines contains the nth line from each file # so do whatever printing you want with it. I'm going # to print out the first word on each line: print "$n = " if $verbose; print +(join " : ", map {chomp;(split /\s+/, $_, 2)[0]} @filelines), +"\n"; }
Also, you can use the $n variable and whatever if statements to just not print that line if you don't want it.
Ciao,
Gryn
In reply to Somewhat general solution
by gryng
in thread Reading arrays
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |