perl -wMstrict -Mvars='*f2' -l -0777ane '
if ( ! @ARGV ) {# this is File1 zone: slurped in $_
while ( /^(\S+)\s+(\S+)$/mg ) {
my $rx = qr/^(?=.*$1)(?=.*$2)/m; # AND matching of $1/$2
pos($f2)=0;
$f2 =~ /\G([^\n]+)/m and print $1 while $f2 =~ /$rx/mg;
print "--- <Separator> ---" unless /\G\n\z/;
}
} else {# This is File2 zone: slurped whole in $f2
$f2 = $_;
}
' File2 File1 #<----- order is important here
Мы должны помнить о порядке печати. здесь очень важно. Строки File2 печатаются в порядке, определяемом строками, которые должны быть найдены в File1. И после того, как каждая строка File1 сопоставляется с шаблоном File1, нам также нужна разделительная линия, независимо от того, было ли совпадение успешным или нет. Файлы прихлебываются, File2 => $ f2, и File обрабатывается как $ _ in