Ваш пример Perl не распечатывает ваш пример вывода, похоже, он делает что-то другое ... так вот как я бы это сделал в Perl:
#!/usr/bin/perl
use warnings;
use strict;
use feature qw/say/;
use List::Util qw/min max/;
my (@col1, @col2);
while (<>) {
chomp;
my ($v1, $v2) = split;
push @col1, $v1;
push @col2, $v2;
}
my @prefix;
for my $i (0 .. $#col1) {
my @range = @col2[max($i - 3, 0) .. min($i + 3, $#col2)];
push @prefix, ' ' if $i > 3;
unshift @range, @prefix;
say "$col1[$i] range(@range)"
}
работает:
$ perl range.pl input.txt
A range(1 3 5 4)
B range(1 3 5 4 7)
C range(1 3 5 4 7 1)
D range(1 3 5 4 7 1 1)
E range( 3 5 4 7 1 1 3)
F range( 5 4 7 1 1 3)
G range( 4 7 1 1 3)
H range( 7 1 1 3)
Форматирование прервется, если какое-либо из чисел будет больше 9.