특정 줄을 기준으로 파일을 두 개의 개별 파일로 분할해야 합니다. 예를 들면 다음과 같습니다.
.
.
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\(%\)/
파일이 생성되며 xx00
두 xx01
부분을 포함합니다.
답변2
이는 파일을 읽고 줄의 시작 부분에 도달할 file0
때까지 해당 줄을 씁니다 . 이 줄부터 시작하여 모든 줄이 작성됩니다 .file1
Fub_Level_DACGE
file2
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
에 할당된 이름입니다 .f
file2
print>f
현재 행을 이름이 지정된 파일에 씁니다
f
.