Не уверен, как вы хотите иметь дело со строками, которые имеют нечетное число двойных кавычек (например, строка в двойных кавычках занимает несколько строк), но возможно:
awk '!(NR%2){gsub(",",";")} 1' RS=\" ORS=\"
Это просто обрабатывает "
в качестве разделителя записей и выполняет замену только для нечетных записей.Кажется, работает как хотелось.(Или, скорее, это работает так, как вы, похоже, желаете!)
Как указывает oguz в комментарии, в конце выводится дополнительная "
.Это можно исправить с помощью:
awk '!(NR%2){gsub(",",";")} {printf RFS $0} {RFS="\""}' RS=\"
, что немного страшнее, но более правильно.(или, скорее, менее правильно!) Если ваш входной поток заканчивается на "
, эта кавычка будет усечена.Однако, если ваш ввод завершается новой строкой, а не "
, это будет делать то, что вы хотите.
OTOH, вы можете просто захотеть сделать:
perl -wpE 'BEGIN{$/=\1}; y/,/;/ if $in; $in = ! $in if $_ eq "\""'
Чточитает один символ и использует простой конечный автомат.($_
является текущим символом, поэтому $in = ! $in
меняет состояние, когда видна двойная кавычка, и транслитерация происходит только тогда, когда $in
не равен нулю.)