특정 줄을 기준으로 파일을 두 부분으로 분할

특정 줄을 기준으로 파일을 두 부분으로 분할

특정 줄을 기준으로 파일을 두 개의 개별 파일로 분할해야 합니다. 예를 들면 다음과 같습니다.

.
.
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
.
.

따라서 위의 모든 줄은 Fub_Level_DACGE(%)하나의 파일에 배치되고 나머지 줄(포함)은 Fub_Level_DACGE(%)다른 파일에 배치됩니다. 어떻게 해야할지 아시나요?

답변1

실제로 이를 위해 설계된 유틸리티는 다음과 같습니다.csplit

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

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

그래서 이 경우에는

csplit file /Fub_Level_DACGE\(%\)/

파일이 생성되며 xx00xx01부분을 포함합니다.

답변2

이는 파일을 읽고 줄의 시작 부분에 도달할 file0때까지 해당 줄을 씁니다 . 이 줄부터 시작하여 모든 줄이 작성됩니다 .file1Fub_Level_DACGEfile2

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

어떻게 작동하나요?

  • -v f=file1

    변수를 f초기 출력 파일의 이름으로 설정합니다 file1.

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

    로 시작하는 줄에 도달할 때 두 번째 출력 파일 Fub_Level_DACGE에 할당된 이름입니다 .ffile2

  • print>f

    현재 행을 이름이 지정된 파일에 씁니다 f.

관련 정보