Os dados de entrada são do tipo orientados por parágrafos, então vamos lê-los como um parágrafo em vez de linha por linha:
awk -v RS="\n=\n" '
/PRIMER_LEFT_NUM_RETURNED=[^0]/ {
n = split($0, lines, /\n/)
for (i=1; i<=n; i++) {
if (lines[i] ~ /^(SEQUENCE_ID|SEQUENCE_TEMPLATE|PRIMER_LEFT_NUM_RETURNED|PRIMER_RIGHT_NUM_RETURNED|PRIMER_INTERNAL_NUM_RETURNED|PRIMER_PAIR_NUM_RETURNED|[^=]+_0[^=]*)=/)
print lines[i]
}
print "="
}
' input.file
ou o perl equivalente (permite expressões regulares "expandidas" mais legíveis
perl -0777 -ne '
BEGIN {
$wanted = qr{
^ # at the beginning of the string
(?: SEQUENCE_ID # match one of these words
| SEQUENCE_TEMPLATE
| PRIMER_LEFT_NUM_RETURNED
| PRIMER_RIGHT_NUM_RETURNED
| PRIMER_INTERNAL_NUM_RETURNED
| PRIMER_PAIR_NUM_RETURNED
| [^=]+_0[^=]*
)
= # followed by an equal sign
}x
}
for (split /^=$/m) {
if (/PRIMER_LEFT_NUM_RETURNED=[^0]/) {
print join("\n", grep {$_ =~ $wanted} split /\n/), "\n=\n";
}
}
# or, as a single command:
#
# print
# map {join("\n", grep {$_ =~ $wanted} split /\n/) . "\n=\n"}
# grep {/PRIMER_LEFT_NUM_RETURNED=[^0]/}
# split /^=$/m
' input.file