我有一个简单的文本文件,我想把它分成两部分 每当我看到 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
确保连续的空行不会形成空文件。{*}
表示尽可能多地拆分。