У меня есть один файл с несколькими элементами <elem>...</elem>
. Мне нужно разбить этот файл на n
файлов с m
элементами в каждом (аргумент передается команде awk, которую я использую). Например, если в моем исходном файле 40 элементов, я бы хотел разделить его на 3 файла (10 элементов, 13 элементов и 17 элементов).
Проблема в том, что в исходном файле есть элементы с разной структурой.
EDITED AFTER fedorqui comment:
I use as awk command as files I want to get at the end of the process.
That means If I need 3 files with m1, m2 and m3 elements, I will
execute 3 awk with different parameters
Пример ввода (file.txt) (5 элементов)
<elem>aaaaaaaa1</elem>
<elem>aaaaaaaa2</elem>
<elem>bbbbbbbb
bbbbbbbbb
bbbbbbbbb</elem>
<elem>bbbbbbbb2</elem>
<elem>ccccc
cccc</elem>
Как видите, 1-й/2-й/4-й элемент находится в одной строке, 3-й элемент находится в 3-х строках без пустых строк и 5-й элемент находится в 3-х строках с пустой строкой.
Пустые строки между элементами не являются проблемой, но пустые строки внутри элемента не являются проблемой
Пример желаемого результата:
file_1.txt (2 элемента)
<elem>aaaaaaaa1</elem>
<elem>aaaaaaaa2</elem>
file_2.txt (2 элемента)
<elem>bbbbbbbb
bbbbbbbbb
bbbbbbbbb</elem>
<elem>bbbbbbbb2</elem>
file_3.txt (1 элемент)
<elem>ccccc
cccc</elem>
команда AWK
(suffixFile — это суффикс файла. Например, fileAux_1.txt, fileAux_2.txt...)
Попытка1
awk -v numElems=$1 -v suffixFile=$2 '{
for(i=1;i<=numElems;i++) {
printf "<doc>"$i > "fileAux_" suffixFile".txt"
}
}' RS='' FS='<doc>' file.txt
Работает, кроме пустых строк внутри элемента. Я понимаю, почему это терпит неудачу, потому что RS='' говорит awk разбить пустые строки
Попытка 2
awk -v numElems=$1 -v suffixFile=$2 '{
for(i=1;i<=numElems;i++) {
printf $i > "fileAux_" suffixFile".txt"
}
}' RS='<doc>' FS='<doc>' file.txt
Другой подход, но он также терпит неудачу
Может кто-нибудь помочь мне?
Заранее спасибо!
file_1
и что делатьfile_2
? Это основано на первой букве в содержании тега<elem>
? - person fedorqui 'SO stop harming'   schedule 09.01.2015awk -v numElems=1
и т. д.), и ту, которая не работает. - person fedorqui 'SO stop harming'   schedule 09.01.2015