У меня есть файл данных с разделителями и вводом пользователя, который мне нужно очистить. В частности:
- В свободные текстовые поля встроены новые строки, которые я хочу удалить
- Количество столбцов может меняться от одной строки к следующей
- Первое поле каждой строки ДОЛЖНО ВСЕГДА начинаться с шаблона
"INC\d{12}"
(двойные кавычки являются частью шаблона).
- Каждый
\n
должен быть заменен одним пробелом, если за ним сразу не следует шаблон "INC\d{12}"
- В настоящее время я использую Perl (предпочтительно) в Cygwin, но также возможны ответы на awk или sed.
Вот некоторые фиктивные входные данные (я сохранил свой файл с именем test_input_so.txt
):
"INC000111111111", "field2", "field3"
"INC000222222222", "field2", "field3","INC000123456789 blahblah"
"INC000444444444", "fie"""ld2", "field3"
"INC000123
456789", "field2", "field3",
"INC000333333333", "INC000123456789", "field3""
"INC000555555555", "field2", "fiel
d3","field4"
Вот требуемый вывод для вышеуказанных данных:
"INC000111111111", "field2", "field3"
"INC000222222222", "field2", "field3","INC000123456789 blahblah"
"INC000444444444", "fie"""ld2", "field3"
"INC000123456789", "field2", "field3",
"INC000333333333", "INC000123456789", "field3""
"INC000555555555", "field2", "field3","field4"
Я пробовал несколько комбинаций отрицательных взглядов / зад, но я не уверен, почему это не работает.
Вот один пример:
perl -pe 's/\n(?!"INC\d{12})/ /g;' test_input_so.txt
Удаляет все \n
, но неправильно удаляет \n
, за которым следует "INC123456789012", который должен оставить на месте.