什么类似 csplit 的命令可以让我从一个文本文件创建多个文件?

What csplit-like command lets me create several files from one text file?

是否已经有任何工具可以满足我的需求?我想将文件 'one' 拆分为以 @ 开头的行,后跟文件名:

$ cat one
@header
-- header --
@body
-- body --
@body isn't a split point
@footer
-- footer --

$ splitit one
$ ls
body footer header one 
$ cat header
-- header --
$ cat body
-- body --
@body isn't a split point
$ cat footer
-- footer --

什么是 splitit?

用例:

awk 'NF==1 && sub(/^@/,""){f=[=10=]; next} {print > f}' one

如果您将有很多输出文件并且不使用 GNU awk,那么您必须在运行时关闭它们:

awk 'NF==1 && sub(/^@/,""){close(f); f=[=11=]; next} {print > f}' one

备选 awk 方法:

awk -F' *|@' '[=10=]~/^@/ && NF==2{fn=;next}{ print > fn }' one
  • -F' *|@' - 复合字段分隔符(space(s) 或 @