Assumindo que cada página comece com ^L (um literal Ctrl + L ):
awk '/^L/ { p++ } (p-1) % 500 == 0 { f = FILENAME "-page-" p ".txt" } { print > f }' file.txt
Isso contaria as linhas com ^L e se a contagem menos 1 for um fator de 500 (página 1, página 501, página 1001 etc.), ela definirá a variável f em um nome de arquivo para gerar a seguinte texto em.
O ^L no código awk é não os dois caracteres ^ e L , mas um literal Ctrl + L (você pode digitar isto com Ctrl + V Ctrl + L ). Você também pode usar 4 no lugar disso.
Para um pequeno documento de teste test.txt :
^L
page 1
^L
page 2
^L
page 3
^L
page 4
... e mudando de 500 para 2 para teste, isso gera dois arquivos, test.txt-page-1.txt e test.txt-page-3.txt , cada um contendo duas linhas (marcador de página e texto) do arquivo de entrada.
test.txt-page-1.txt :
^L
page 1
^L
page 2
test.txt-page-3.txt :
^L
page 3
^L
page 4
Os arquivos que devem ser analisados aparentemente têm um cabeçalho antes do primeiro marcador de página. Esse cabeçalho precisa ser ignorado. A seguinte variação no comando awk acima faz isso:
awk '/^L/ { p++ } (p-1) % 500 == 0 { f = FILENAME "-page-" p ".txt" } p > 0 { print > f }' file.txt
Ao restringir a saída para quando p for maior que zero, exigimos que pelo menos um marcador de página tenha sido analisado antes de produzir qualquer coisa.