Com awk , você pode fazer:
awk '{print >out}; /XYZ/{out="file2"}' out=file1 largefile
Explicação: O primeiro argumento awk ( out=file1 ) define uma variável com o nome do arquivo que será usado para saída enquanto o argumento subseqüente ( largefile ) é processado. O programa awk imprimirá todas as linhas no arquivo especificado pela variável out ( {print >out} ). Se o padrão XYZ for encontrado, a variável de saída será redefinida para apontar para o novo arquivo ( {out="file2}" ) que será usado como destino para imprimir as linhas de dados subseqüentes.
Referências:
- manual do gawk: Redirecionamento link