#!/usr/bin/perl use strict; # https://perlmonks.org/?node_id=11129698 use warnings; @ARGV = qw( port.file ip.file out.file); # FIXME only for testing @ARGV == 3 or die "wrong number of arguments"; open $_, '<', shift or die for my( $F0, $F1); open $_, '>', shift or die for my $F2; my ($no, $IP) = 0; while( <$F0> ) # NOTE assumes port file is in sorted order { my ($stop, $port) = /^(\d+)\s+(.*\n)/; $no += ($IP = <$F1> // die) =~ /^(?:\d+\.){3}\d+\s+\z/ while $no < $stop; print $F2 $IP =~ s/\s+\z//r, "\t$port"; } close $F2; system 'cat out.file'; # FIXME only for testing