Sua intuição está certa. Há provavelmente uma maneira muito mais simples de fazê-lo via sed / awk ... mas eu decidi que era hora de retocar meu perl e hackear este pedaço juntos:
#!/usr/bin/perl
use warnings;
use strict;
my $n = 5;
my $linenum = 1;
while (<>)
{
my @cols = split(/\s+/);
if ((length($cols[2]) > $n) || (length($cols[3]) > $n))
{
print "Line $linenum: $_";
}
$linenum++;
}
Ele imprime apenas o número da linha e a linha que correspondem aos critérios, mas a impressão do que você deseja não deve exigir muita reescrita.