我有一个简单的文本文件,我想将其分为两部分 每当我看到3个(或更多)连续的新行。例如:
Fiona Gallagher
Frank Gallagher
Sheila Jackson
Dominique Winslow
Kermit
应创建2个文本文件:
Fiona Gallagher
Frank Gallagher
Sheila Jackson
和
Dominique Winslow
Kermit
尽管SO中的类似帖子解决了将文本文件分为两部分(this PHP solution,this C# solution,and this Java solution)的问题,但我在bash中找不到解决方案。似乎有一个合理的bash解决方案在某个地方(?)足够合理。 谢谢!
答案 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
确保连续的空行不会形成空文件。 {*}
意味着尽可能多地分裂。