Я застрял в этом на несколько часов и перебрал множество различных инструментов, чтобы выполнить свою работу. Безуспешно. Было бы здорово, если бы кто-нибудь мог мне с этим помочь.
Вот проблема:
У меня есть очень большой файл CSV (более 400 МБ), который отформатирован неправильно. Прямо сейчас это выглядит примерно так:
This is a long abstract describing something. What follows is the tile for this sentence." ,Title1 This is another sentence that is running on one line. On the next line you can find the title. ,Title2
Как вы, вероятно, видите, заголовки «, Title1» и «, Title2» должны фактически находиться в той же строке, что и предыдущее предложение. Тогда это будет выглядеть примерно так:
This is a long abstract describing something. What follows is the tile for this sentence.",Title1 This is another sentence that is running on one line. On the next line you can find the title.,Title2
Обратите внимание, что конец предложения может содержать кавычки или нет. В конце концов, их тоже следует заменить.
Вот что я придумал до сих пор:
sed -n '1h;1!H;${;g;s/\."?.*,//g;p;}' out.csv > out1.csv
Это должно фактически выполнить работу по сопоставлению выражения в нескольких строках. К сожалению, нет :)
Выражение ищет точку в конце предложения и необязательные кавычки, а также символ новой строки, с которым я пытаюсь сопоставить. *.
Помощь очень ценится. И не имеет значения, какой инструмент выполняет эту работу (awk, perl, sed, tr и т. Д. ).