Как разбить текстовый файл на 2 части на основе 3 (или более) новых строк в bash - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть простой текстовый файл, и я хочу разделить его на 2 части всякий раз, когда я вижу 3 (или более) последовательных новых строк . Например:

Fiona Gallagher
Frank Gallagher
Sheila Jackson



Dominique Winslow
Kermit

Следует создать 2 текстовых файла:

Fiona Gallagher
Frank Gallagher
Sheila Jackson

и

Dominique Winslow
Kermit

Хотя подобные сообщения в SO решают проблему разделения текстовых файлов на 2 части ( это решение PHP , это решение C # , и это решение Java ) Я не мог найти решение в Bash. Кажется достаточно разумным, что где-то есть аккуратное решение для bash (?). Спасибо!

1 Ответ

0 голосов
/ 05 сентября 2018

По запросу OP решение csplit, которое работает только с 2 последовательными \n\n или более.


Самый простой способ - использовать GNU csplit, который есть в любой современной 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 гарантирует, что последовательные пустые строки не образуют пустых файлов. {*} Значит, разделить столько раз, сколько это возможно.

...