Ввод (2 столбца):
col1 , col2
David, 100
"Ronald
Sr, Ron , Ram" , 200
Harry
potter
jr" , 200
Prof.
Snape" , 100
Примечание. У Гарри и Проф. нет начальных кавычек.
Вывод (2 столбца)
col1 | col2
David | 100
Ronald Sr , Ron , Ram| 200
Harry potter jr| 200
Prof. Snape| 100
Что я пробовал (PySpark)?
df = spark.read.format("csv").option("header",True).option("multiLine",True).option("escape","\'")
Проблема Вышеупомянутый код работал нормально, когда многострочный текст имел начальную и конечную двойные кавычки (например, строка, начинающаяся с Рональда)
Но это не работало со строками, где у нас есть только конечные кавычки, но нет начальных кавычек (например, Гарри и Проф).
Даже если мы добавим стартовые кавычки с Гарри и Профом, это решит проблему.
Любая идея с использованием Pyspark, Python или Shell и т. д. приветствуется!
@EdMorton Нет - данные не должны содержать «|» (трубка)
На основании предоставленной небольшой выборки:
|
)|
); иногда пробел убирается, иногда ставится пробел; пока мы не будем беспокоиться о интервалахОдна awk
идея:
awk -F, '
{ gsub(/"/,"") } # remove double quotes
FNR==1 || # if 1st line or last field is a number then ...
($NF+0)==$NF { print prev gensub(FS,"|",(NF-1)) # print any previous line(s) data plus current line, replacing last comma with a pipe
prev = "" # clear previous line(s) data
next # skip to next line of input
}
{ prev= prev $0 " " } # if we get here then this is a broken line so save contents for later printing
' sample.csv
Это генерирует:
col1 | col2
David| 100
Ronald Sr, Ron , Ram | 200
Harry potter jr | 200
Prof. Snape | 100
Извиняюсь за мой первоначальный вопрос. Я изменил ввод/вывод. На самом деле, у меня есть "запятая" всякий раз, когда строка начинается с двойных кавычек...
Может ли ваш ввод содержать
|
символов?