根据特定行将文件分成两部分

根据特定行将文件分成两部分

我需要根据特定行将一个文件分成两个单独的文件,例如:

.
.
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并写入其行,直到到达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

相关内容