Орр похож, а не просто

я есть текстовый файл, созданный коммерческим программным обеспечением, как показано ниже. Он состоит из разделенных скобками разделов, каждый из которых насчитывает несколько миллионов элементов, но точное значение изменяется от одного случая к другому.

(1
 2
 3
...
)
(11
22
33
...
)
(111
222
333
...
)

Мне нужно добиться вывода, как:

 1;  11;   111
 2;  22;   222
 3;  33;   333
...  ...  ...

Я нашел сложный способ, который:

выполнить Sed операции, чтобы получить

1
2
3
...
#
11
22
33
...
#
111
222
333
...

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

awk -v RS="#" '{print > ("splitted-" NR ".txt")}'

снова удалите пробелы из моих подфайлов с помощью sed

sed -i '/^[[:space:]]*$/d' splitted*.txt

объединить все вместе:

paste splitted*.txt > out.txt

добавить разделитель полей (определенный в моем скрипте bash)

awk -v sep=$my_sep 'BEGIN{OFS=sep}{$1=$1; print }' out.txt > formatted.txt

Я чувствую, что это дерьмо, потому что я перебираю несколько миллионов строк несколько раз. Даже если время возврата вполне удовлетворительное (~ 80сек), я бы хотел найти полное решение awk, но не могу его найти. Что-то вроде:

awk 'BEGIN{RS="(\\n)"; OFS=";"} { print something } '

Я нашел несколько связанных вопросов, особенно этотпреобразование строки в столбец с помощью awk, но это предполагает постоянное количество строк в скобках, что я не могу сделать.

Любая помощь будет оценена.

Ответы на вопрос(6)

Ваш ответ на вопрос