出现模式时将文本文件拆分为多个,在linux中使用命令行

tom*_*len 4 command-line text-processing

我想将一个文本文件分成几个。每次图案出现时都会生成一个新文件。示例:模式将是 PAT

原文件内容:

PAT --example html http://askubuntu.com/page01
ABC
DEF

PAT --example html http://askubuntu.com/page02
GHI
JKL

PAT --example html http://askubuntu.com/page03
MNO
PQR
Run Code Online (Sandbox Code Playgroud)

(等等)

原始文件被称为 original.txt 我想得到这样的文件:

$ cat page01.txt
ABC
DEF
$ cat page02.txt
GHI
JKL
$ cat page03.txt
MNO
PQR
Run Code Online (Sandbox Code Playgroud)

(等等)

理想情况下,使用 grep、awk 等命令......文件的重命名是次要的,但有助于对它们进行分类。提前致谢。

mur*_*uru 7

您可以使用awk一些重定向:

awk -F/ '/^PAT/{close(file);file = $NF; next} /./{print >> file}' foo
Run Code Online (Sandbox Code Playgroud)

结果:

$ head page0*
==> page01 <==
ABC
DEF    

==> page02 <==
GHI
JKL    

==> page03 <==
MNO
PQR
Run Code Online (Sandbox Code Playgroud)

本质上,对于以 开头的每一行PAT,我将保存/变量的最后一个字段(通过 的字段分隔符)file,然后将每个非空行(/./与至少一个字符的匹配行)打印到file.

请注意,在每个循环中关闭前一个文件以防止在"makes too many open files"创建“大量”文件时出现错误很重要。