我有一个日志文件,我想将其分成几个文件
目录
*** Configuration Database
*** Logs
*** Configuration Logs
*** Query Logs
.
.
and so on
问题是,该部分的标题再次出现在正文中,并且各部分之间有适当的数据或日志,因此我必须搜索每个标题的第二个实例,并将数据复制到该标题的第二个实例。下一个标题。
身体
*** Configuration Database
(Data/Logs)
*** Logs
(Data/Logs)
*** Configuration Logs
(Data/Logs)
*** Query Logs
(Data/Logs)
我基本上想获取调试文本文件,针对它运行一个脚本,并将其分解为许多文本文件,目录中的每个部分一个,保持原始文件完整。所以我基本上会有 debug.txt、Configuration Database.txt、Logs.txt 等,每个都有每个部分中的所有数据,直到新部分开始时。任何帮助将不胜感激,因为这有点超出我的能力:)
答案1
尝试这个:
awk '/^[*][*][*] /{ if ($0 in seen) fname=$0; else seen[$0];} fname{print>fname}' file
怎么运行的
awk 隐式地逐行读取文件。对于读取的每一行,我们执行以下操作:
/^[*][*][*] /{ if ($0 in seen) fname=$0; else seen[$0];}
对于任何以三颗星和一个空格开头的行,我们检查之前是否见过该行。如果有,我们就设置
fname
为该行。否则,我们更新关联数组seen
以指示我们已经见过该行一次。fname{print>fname}
如果
fname
是非空值,则将当前行写入名为 的文件fname
。