Верхний ответ на этот вопрос работает только для строк с одним полем в кавычках. Когда я нашел этот вопрос, мне понадобилось что-то, что могло бы работать для произвольного числа цитируемых полей.
В конце концов я наткнулся на ответ Винтермута в другой ветке , и он предоставил хорошее обобщенное решение этой проблемы. Я только что изменил это, чтобы удалить кавычки. Обратите внимание, что вам нужно вызвать awk с -F\"
при запуске программы ниже.
BEGIN { OFS = "" } {
for (i = 1; i <= NF; i += 2) {
gsub(/[ \t]+/, ",", $i)
}
print
}
Это работает, наблюдая, что каждый другой элемент в массиве будет внутри кавычек, когда вы разделяете их символом ", и поэтому он заменяет пробел, разделяющий не в кавычках, на запятую.
Затем вы можете легко связать другой экземпляр awk для выполнения любой необходимой обработки (просто снова используйте переключатель разделителя полей, -F,
).
Обратите внимание, что это может сломаться, если будет указано первое поле - я его не проверял. Если это так, то это легко исправить, добавив оператор if, начинающийся с 2, а не с 1, если первый символ строки - ".