Você pode usar awk
com algum redirecionamento:
awk -F/ '/^PAT/{close(file);file = $NF; next} /./{print >> file}' foo
O resultado:
$ head page0*
==> page01 <==
ABC
DEF
==> page02 <==
GHI
JKL
==> page03 <==
MNO
PQR
Essencialmente, para cada linha que começa com PAT
, estou salvando o último campo (por meio de um separador de campo /
) da variável file
e imprimindo todas as linhas não vazias ( /./
corresponde linhas com pelo menos um caractere) para o nome contido em file
.
Observe que é importante fechar o arquivo anterior em cada loop para evitar um erro "makes too many open files"
quando há "muito" arquivo criado.