如何根据 bash 中的 3 个(或更多)换行符将文本文件分成 2 个部分



我有一个简单的文本文件,我想把它分成两部分 每当我看到 3 行(或更多(连续的新行时。例如:

Fiona Gallagher
Frank Gallagher
Sheila Jackson

Dominique Winslow
Kermit

应创建 2 个文本文件:

Fiona Gallagher
Frank Gallagher
Sheila Jackson

Dominique Winslow
Kermit

尽管SO中的类似帖子解决了将文本文件分成两部分(这个PHP解决方案,这个C#解决方案和这个Java解决方案(的问题,但我在bash中找不到解决方案。似乎很合理,一个整洁的 bash 解决方案在某个地方(? 谢谢!

应 OP 的要求,一种仅适用于 2 个连续nn或更多csplit解决方案。


最简单的方法是使用任何现代bash系统都有的GNUcsplit。假设bla包含:

Fiona Gallagher
Frank Gallagher
Sheila Jackson
Dominique Winslow
Kermit



a
v
b

然后

csplit --suppress-matched -z bla "/^$/" '{*}'

会做你想做的事,创造

>cat xx00 
Fiona Gallagher
Frank Gallagher
Sheila Jackson
>cat xx01
Dominique Winslow
Kermit
>cat xx02
a
v
b

您可以使用-f--prefix=xx更改为任何前缀。--suppress-matched确保您拆分的内容(空行(不会被输出,-z确保连续的空行不会形成空文件。{*}表示尽可能多地拆分。

最新更新