Experimente substituições simples de sed
para o seu primeiro problema:
sed 's/","/~;~/g; s/^"\|"$/~/g' file
e um script awk
mais usado para o segundo:
awk -F\" '{$1=$1; for (i=2; i<=NF; i+=2) gsub ("\|", SUBSEP, $i); gsub ("\|", ";"); gsub ("~~", "/\""); gsub (SUBSEP, "|")} 1' OFS="~" file
Primeiro substitui todos os |
entre aspas duplas por um espaço reservado incomum que não é comumente encontrado em arquivos de texto, depois faz as substituições desejadas e, em seguida, inverte a substituição de espaço reservado.
Por favor, esteja ciente de que ambos são adaptados aos seus problemas e, portanto, geralmente não são aplicáveis a outros problemas, mesmo semelhantes, sem adaptação.
Saída se aplicada à amostra em sua pergunta (Ubuntu, mawk 1.3.3 Nov 1996):
~098789~;~Hello world!~; 12,7;~Cities I want to visit Rome| London~;15.11.2018;~Yes~
~032425~;~Travel in /"New York/", USA~; 113,3;;15.11.2018;~Yes~