Если у вас есть GNU awk, вы можете использовать его переменную FPAT
, чтобы разбить каждую строку на поля, а затем используйте gsub
для их редактирования:
gawk -v OFS='\t' -v FPAT='"(""|[^"]*)*"|[^\t]*' '
{
for (i=1; i<=NF; i++)
gsub(/\t/, " ", $i)
print
}
' in.tsv > out.tsv
OFS
устанавливается на вкладкутак что print
производит вывод через табуляцию.
Значение FPAT, которое я дал здесь, определяет поля как:
- двойная кавычка
- , за которой следуетлюбое количество:
- две двойные кавычки
- или любое количество символов, которые не являются двойными кавычками
- с последующими двойными кавычками
или:
- любое количество символов, не являющихся символами табуляции
Обратите внимание, что gawk не может обрабатывать встроенные символы новой строки в полях.
См .: https://www.gnu.org/software/gawk/manual/html_node/Splitting-By-Content.html