У меня есть огромный файл csv из экспорта, разделенного вертикальной чертой
8CDAC2EF-9261-4B9F-9D41-87B460C467B0|SAMPLE1|SAMPLE 2|SAMPLE 3|2020-08-03 00:00:00
8CDAC2EF-9261-4B9F-9D41-87B460C467B0|SAMPLE1|SAMPLE
2|SAMPLE 3|2020-08-03 00:00:00
8CDAC2EF-9261-4B9F-9D41-87B460C467B0|SAMPLE1|SAMPLE 2|
|2020-08-03 00:00:00
8CDAC2EF-9261-4B9F-9D41-87B460C467B0|SAMPLE1|SAMPLE 2||2020-08-03 00:00:00
8CDAC2EF-9261-4B9F-9D41-87B460C467B0|SAMPLE1||SAMPLE 3|2020-08-03 00:00:00
В идеале первая строка является ожидаемым форматом, однако, поскольку это необработанные данные, в полях появляется новый символ строки SAMPLE 2
, SAMPLE 3
. Я хотел бы заменить новую строку или разрывающие символы в этих полях пустым символом, чтобы он стал форматом первой строки.
PS: SAMPLE 2
и SAMPLE 3
также могут быть нулевыми.
Я хотел сделать это в формате ниже, ie, двойные кавычки заключены, как показано ниже.
"8CDAC2EF-9261-4B9F-9D41-87B460C467B0"|"SAMPLE1"|"SAMPLE 2"|"SAMPLE 3"|"2020-08-03 00:00:00"
Я попробовал приведенный ниже код, он работает нормально, но ломается, если есть новые символы строки в каждой строке.
sed -e 's/^\|$/"/g' -e 's/|/"|"/g' input.csv
Изменить: принятое решение работает нормально, но поскольку у меня есть какие-то необработанные данные, мне пришлось выполнить некоторые дополнительные шаги, поскольку некоторые из значений содержат |
и другие специальные строки, которых там быть не должно.
То, что я сделал, было следующим.
- Мне удалось управлять разделителем из экспорта, я использовал
€
, так как мы находим что он не используется в данных ни в одном из наших примеров. - Затем я заменил
"
, '
, |
символом пробела. наконец, разделитель €
был заменен на |
. - Затем использовал принятый ответ, чтобы отфильтровать разрывы строк
- Наконец, передал их по конвейеру, чтобы они были заключены в кавычки.