Мне нужно разбить файл на два отдельных файла на основе определенной строки, например:
. . 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(%)
идут в другом файле. Любая идея, как это можно сделать?
Утилита, которая на самом деле предназначена для этого, – csplit
NAME csplit - split a file into sections determined by context lines SYNOPSIS csplit [OPTION]... FILE PATTERN...
Итак, в этом случае
csplit file /Fub_Level_DACGE\(%\)/
будет создавать файлы xx00
и xx01
содержащие две части.
Это будет читать файл file0
и записывать его строки в file1
до тех пор, пока Fub_Level_DACGE
будет достигнута линия, начинающаяся с Fub_Level_DACGE
. Начиная с этой строки, все строки записываются в file2
:
awk -vf=file1 '/^Fub_Level_DACGE/{f="file2"} {print>f}' file0
-vf=file1
Установите переменную f
в имя исходного выходного файла file1
.
/^Fub_Level_DACGE/{f="file2"}
Когда мы дойдем до строки, которая начинается Fub_Level_DACGE
, назначьте f
имя второго выходного файла file2
.
print>f
Запишите текущую строку в файл, чье имя находится в f
.