awk :
awk 'BEGIN{ f=1 }!(NR%3){ n=NR+1 }NR==n{ f++ }
{ print > "STATUS_FILE-"f".txt" }!(NR%12){ f=0 }' file
-
BEGIN{ f=1 }
- define o número inicial do índice de arquivos -
!(NR%3)
- avalia paratrue
em cada terceira linha -
f++
- número de índice do arquivo de incremento após cada terceira linha -
!(NR%12){ f=0 }
- redefine o número do índice do arquivo após cada 12ª linha (4ª seção) -
print > "STATUS_FILE-"f".txt"
- imprime a linha no arquivo com o número de índice de arquivo necessário
Visualizando resultados:
$ head STATUS_FILE*
==> STATUS_FILE-1.txt <==
lineAA|data|Format via FG|398
lineAB|data|Format via FG|398
lineAC|data|Format via FG|398
line_FA|data|Format via FG|398
line_FB|data|Format via FG|398
line_FC|data|Format via FG|398
==> STATUS_FILE-2.txt <==
line_XA|data|Format via FG|398
line_XB|data|Format via FG|398
line_XC|data|Format via FG|398
==> STATUS_FILE-3.txt <==
line_ZA|data|Format via FG|398
line_ZB|data|Format via FG|398
line_ZC|data|Format via FG|398
==> STATUS_FILE-4.txt <==
line_XX|data|Format via FG|398
line_XY|data|Format via FG|398
line_XZ|data|Format via FG|398
Para criar um script " awk " autônomo:
split_on_4x3.awk
conteúdo do script:
#!/bin/awk -f
BEGIN { f=1 }
!(NR%3) { n=NR+1 }
NR==n { f++ }
{ print > "STATUS_FILE-"f".txt" }
!(NR%12) { f=0 }
Uso:
awk -f split_on_4x3.awk inputfile