Вопрос о расширении предыдущего здесь .(Я предпочитаю задавать новый вопрос, а не редактировать первый. Я могу ошибаться)
РЕДАКТИРОВАТЬ: хорошо, я был не прав, я должен отредактировать свой первый вопрос.Мой плохой (ТАК вопрос - искусство, которое трудно освоить)
У меня есть CSV-файл с полуколонкой в качестве разделителя полей.Вот выдержка из CSV-файла:
...;field;(:);10000(n,d);(:);field;....
...;field;123.12(b);123(a);123.00(:);....
Вот желаемый вывод:
...;field;(:);(n,d) 10000;(:);field;....
...;field;(b) 123.12;(a) 123;(:) 123.00;....
Я ищу решение для обмена2 шаблона в каждом поле.
шаблон 1: любая цифра с необязательной десятичной отметкой (.) И необязательной десятичной цифрой
, например: 1 / 1111.00 / 444444444.3 / 32 / 32.6666666 / 1.0 /....
шаблон 2: любая строка, которая начинается с левой круглой скобки, за которой следует один или несколько символов, заканчивающихся правой круглой скобкой
, например: (n, a, p) / (:)/ (llll) / (d) / (123) / (1; 2; 3) ...
Решения, представленные в первом вопросе, подходят для простого файла, который содержит только один столбец.Если я попробую решение в файле csv, я столкнусь с несколькими сбоями.
Поэтому я пытаюсь awk
подобное решение, которое (я думаю) более "ориентировано на столбцы".
У меня естьпопробуйте
awk -F";" '{print gensub(/([[:digit:].]*)(\(.*\))/, "\\2 \\1", "g")}' file
Я, хотя, установив разделитель полей (;), "мой обмен регулярными выражениями" будет успешным в каждом поле.Это была ошибка.
Вот пример отказа
;(:);7320000(n,d);(:)
желаемый результат -> ;(:);(n,d) 7320000;(:)
Мои вопросы (наконец-то): почему awk
ошибка при успешном завершении с файлом с одним столбцом.Какой лучший инструмент для решения этой проблемы?
- sed с очень длинным регулярным выражением?
- awk с очень длинным регулярным выражением?
- for loop?
- другие инструменты?
PS: я знаю, что не ясно.У меня 2 проблемы (английский язык, технические ограничения).К сожалению.