Quebrar um arquivo em duas partes com base em uma determinada linha [duplicado]

0

Eu preciso dividir um arquivo em dois arquivos separados com base em uma linha específica, por exemplo:

.
.
sc_outfifo 0.000E+00 0.000E+00 0.000E+00 0.000E+00 1.586E-02 1.586E-02 1.586E-02
Fub_Level_DACGE(%) PS0_SI.0 PS0_SI.0 PS0_SI.0 PS1_SI.0 PS1_SI.0 
siunit 98.91 98.81 98.91 90.06 96.37 81.37 81.37 16655
.
.

Assim, todas as linhas acima de Fub_Level_DACGE(%) ficam em um arquivo e o restante incluindo Fub_Level_DACGE(%) em outro arquivo. Alguma idéia de como isso pode ser feito?

    
por Souvik 23.08.2015 / 00:38

2 respostas

3

O utilitário que foi criado para isso é csplit

NAME
       csplit - split a file into sections determined by context lines

SYNOPSIS
       csplit [OPTION]... FILE PATTERN...

Então, neste caso

csplit file /Fub_Level_DACGE\(%\)/

produzirá os arquivos xx00 e xx01 contendo as duas partes.

    
por 23.08.2015 / 00:49
1

Isso lerá o arquivo file0 e gravará suas linhas em file1 até que a linha que inicia Fub_Level_DACGE seja atingida. Começando com essa linha, todas as linhas são gravadas em file2 :

awk -v f=file1 '/^Fub_Level_DACGE/{f="file2"} {print>f}' file0

Como funciona

  • -v f=file1

    Defina a variável f para o nome do arquivo de saída inicial, file1 .

  • /^Fub_Level_DACGE/{f="file2"}

    Quando atingirmos a linha que inicia Fub_Level_DACGE , atribua a f o nome do segundo arquivo de saída, file2 .

  • print>f

    Escreva a linha atual no arquivo cujo nome está em f .

por 23.08.2015 / 00:43