Разделить каждое второе вхождение разделителя - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь использовать awk для разделения файла при каждом появлении разделителя, но в начале я всегда получаю пустой файл и не могу понять, почему.

Данные, которые мне нужно разбить на несколько файлов, имеют формат, подобный следующему:

----------
aaa
bbb
----------
ccc
ddd
----------
eee
fff
----------
ggg  

Первый полученный файл должен содержать:

----------
aaa
bbb
----------
ccc
ddd

Разделитель всегда одинаков (знак «минус» 10 раз).
Я сейчас пытаюсь сделать это так:

awk -v RS='[-]{10}' '{i++} {file = sprintf("temp-%s", int(i/2)); print >> file;}'

Однако первый файл, который я получаю (temp-0), всегда содержит пустую строку и ничего больше.
Кроме того, исходный файл не начинается с пустой строки и не имеет содержимого (они были удалены ранее).

Кто-нибудь может помочь, пожалуйста?

1 Ответ

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

Я бы не стал играть с RS для этой проблемы. Вы можете сосчитать ---------, чтобы решить, нужно ли увеличивать индекс файла. Попробуйте эту строку:

awk '/^--*$/{c++;f+=c%2?1:0}{print > "temp-"f}' file

Обратите внимание, что приведенная выше строка дает вам представление о том, как обрабатывать строку и индекс файла. Если ваш файл огромен, вам нужно close() файл и использовать >> для повторного перенаправления, в противном случае вы получите такие ошибки, как too many opened files.

...