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.