我需要根据特定行将一个文件分成两个单独的文件,例如:
.
.
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
。