Tengo un archivo de entrada delimitado por comas (,
). Hay algunos campos entre comillas dobles que tienen una coma. Aquí está la fila de muestra
123,"ABC, DEV 23",345,534.202,NAME
Necesito eliminar todas las comas que aparecen dentro de las comillas dobles y las comillas dobles también. Entonces, la línea anterior debería analizarse como se muestra a continuación
123,ABC DEV 23,345,534.202,NAME
Intenté lo siguiente usando sed
pero no dando los resultados esperados.
sed -e 's/(".*),(".*)/1 2/g'
Cualquier truco rápido con sed
, awk
o cualquier otra utilidad de Unix por favor?
Respuesta aceptada:
Si las comillas están equilibradas, querrá eliminar las comas entre comillas, esto se puede expresar en awk
así:
awk -F'"' -v OFS='' '{ for (i=2; i<=NF; i+=2) gsub(",", "", $i) } 1' infile
Salida:
123,ABC DEV 23,345,534.202,NAME
Explicación
El -F"
hace que awk separe la línea en los signos de comillas dobles, lo que significa que cualquier otro campo será el texto entre comillas. El ciclo for ejecuta gsub
, abreviatura de sustitución global, en cualquier otro campo, reemplazando la coma (","
) sin nada (""
). El 1
al final invoca el bloque de código predeterminado:{ print $0 }
.