什么csplit-like命令让我从一个文本文件创建几个文件?

时间:2017-07-15 11:50:43

标签: shell text awk csplit

有没有工具可以做我想要的工作?我想将文件'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 --

什么是分裂?

用例:

  • 在一个文件中编辑我的html,js,css和docs(文件不大)
  • m4预处理一个文件
  • splitit读取m4输出并写出几个文件
  • 缩进/美化文件
  • 用cat ...重新组合成较少的文件。

2 个答案:

答案 0 :(得分:2)

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

如果你有很多输出文件并且不使用GNU awk,那么你必须随时关闭它们:

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

答案 1 :(得分:0)

替代 awk 方法:

awk -F' *|@' '$0~/^@/ && NF==2{fn=$2;next}{ print > fn }' one
  • -F' *|@' - 复合字段分隔符(空格或@