Орр похож, а не просто
я есть текстовый файл, созданный коммерческим программным обеспечением, как показано ниже. Он состоит из разделенных скобками разделов, каждый из которых насчитывает несколько миллионов элементов, но точное значение изменяется от одного случая к другому.
(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, но это предполагает постоянное количество строк в скобках, что я не могу сделать.
Любая помощь будет оценена.