将多个数据部分解析为单独的文件

Str*_*gos 3 sed awk text-processing

我有一个包含多个日志的串联日志文件,我试图将其解析为单个日志文件。我稍后会将它们重命名为每个的日期/时间。每个日志以“--- LOG REPORT ---”分隔。

到目前为止,我有:

sed -n '/--- LOG REPORT ---/,/--- LOG REPORT ---/p' logname.log > test.out
Run Code Online (Sandbox Code Playgroud)

但是,您可以想象,这仅输出模式的第一个实例。我查看了 sed 的手册页,但我不相信它可以输出多个文件。也许我可以继续从文件中提取直到它为空,但这似乎工作量太大。我怎么能做到这一点?也许我应该改用 awk ?

输入文件 filename.log 的示例

--- LOG REPORT ---
Mary
Had
A
Little
Lamb
--- LOG REPORT ---
Her
Fleece
Was
White
As
Snow
Run Code Online (Sandbox Code Playgroud)

期望的输出:

在 filename_1.log 中

--- LOG REPORT ---
Mary
Had
A
Little
Lamb
Run Code Online (Sandbox Code Playgroud)

在 filename_2.log 中

--- LOG REPORT ---
Her
Fleece
Was
White
As
Snow
Run Code Online (Sandbox Code Playgroud)

Ram*_*esh 9

这个命令怎么样?

csplit logname.log /---\ LOG\ REPORT\ ---/ {*}
Run Code Online (Sandbox Code Playgroud)

测试

cat logname.log
--- LOG REPORT ---
Mary
Had
A
Little
Lamb
--- LOG REPORT ---
Her
Fleece
Was
White
As
Snow
Run Code Online (Sandbox Code Playgroud)

运行上述命令后,我得到的输出是,

cat xx01
--- LOG REPORT ---
Mary
Had
A
Little
Lamb
cat xx02
--- LOG REPORT ---
Her
Fleece
Was
White
As
Snow
Run Code Online (Sandbox Code Playgroud)


ste*_*ver 6

怎么样的东西

awk '/--- LOG REPORT ---/ {n++;next} {print > "test"n".out"}' logname.log
Run Code Online (Sandbox Code Playgroud)

  • `next` 只是防止 `--- LOG REPORT ---` 记录分隔符行被包含在输出文件中。如果你想包括它,你可以删除它 - 我只是猜这是多余的。 (2认同)