У меня есть большое количество больших файлов данных, разделенных точкой с запятой. Все строковые поля заключены в двойные кавычки. В некоторых файлах есть дополнительные кавычки в строковых полях, что портит последующий импорт данных для анализа (я импортирую в Stata).
Этот код позволяет мне увидеть проблемные цитаты, используя gnu-awk:
echo '"This";"is";1;"line" of" data";""with";"extra quotes""' | awk 'BEGIN { FPAT = "([^;]+)|(\"[^\"]+\")"}; {for ( i=1 ; i<=NF ; i++ ) if ($i ~ /^"(.*".*)+"$/) {print NR, $i}}'
1 "line" of" data"
1 ""with"
1 "extra quotes""
но я не знаю, как их заменить.
Я думал сделать замену вручную, но оказалось, что в некоторых файлах есть несколько сотен совпадений. Я знаю о функциях awk -sub-, -gsub- и -match-, но я не уверен, как разработать поиск и замену для этой конкретной проблемы.
В приведенном выше примере соответствующие поля должны быть "This"
, "is"
, 1
, "line of data"
, "with"
, "extra quotes"
, то есть: все точки с запятой являются разделителями, и все кавычки, кроме самых внешних цитаты должны быть удалены.
Должен ли я использовать -sed- или -awk- правильный инструмент? Надеюсь, вы можете помочь мне!
Спасибо,
Matthijs