如何基于bash中的3个(或更多)换行符将文本文件分为2个部分

时间:2018-09-05 06:23:07

标签: bash split text-files

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

Fiona Gallagher
Frank Gallagher
Sheila Jackson



Dominique Winslow
Kermit

应创建2个文本文件:

Fiona Gallagher
Frank Gallagher
Sheila Jackson

Dominique Winslow
Kermit

尽管SO中的类似帖子解决了将文本文件分为两部分(this PHP solutionthis C# solutionand this Java solution)的问题,但我在bash中找不到解决方案。似乎有一个合理的bash解决方案在某个地方(?)足够合理。 谢谢!

1 个答案:

答案 0 :(得分:1)

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


最简单的方法是使用任何现代csplit系统都具有的GNU bash。假设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

您可以使用xx-f--prefix=更改为任何前缀。 --suppress-matched确保不会分割分割的内容(空行),-z确保连续的空行不会形成空文件。 {*}意味着尽可能多地分裂。