什么类似 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?
用例:
- 在一个文件中编辑我的 html、js、css 和文档(文件不大)
- m4预处理一个文件
- splitit 读取 m4 输出并写出几个文件
- indent/beautify 个文件
- 用 cat 重新组合成更少的文件...
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) 或 @
)
是否已经有任何工具可以满足我的需求?我想将文件 '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?
用例:
- 在一个文件中编辑我的 html、js、css 和文档(文件不大)
- m4预处理一个文件
- splitit 读取 m4 输出并写出几个文件
- indent/beautify 个文件
- 用 cat 重新组合成更少的文件...
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) 或@
)