Você pode passar um padrão de múltiplas linhas para grep, para pesquisar uma linha que contenha uma correspondência para qualquer um dos padrões. Em outras palavras, um padrão multilinha é uma disjunção dos padrões em cada linha.
print_one_pattern_per_line | grep -f - rel.log
Por acaso, você pode simplificar a parte print_one_pattern_per_line. Já que você está chamando o awk, você pode fazer a linha de entrada correspondente dentro dela. E o seu código awk pode ser escrito de forma mais simples, usando a substituição de expressão regular para remover tudo até MasterId=
(assumindo que há uma única ocorrência de MasterId=
em cada linha, porque seu código corresponde à primeira instância enquanto meu regexp abaixo corresponde à última instância).
<instruments.log awk '
!/(^|[[:space:]])Swap/ {
gsub(/.*MasterId=/, "");
$0 = substr($0, 1, index($0, "L")-3);
print;
}' | grep -f - rel.log