GNU/Linux >> Tutoriales Linux >  >> Linux

¿Eliminar la coma entre comillas solo en un archivo delimitado por comas?

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 } .


Linux
  1. ¿La diferencia entre "du -sh *" y "du -sh ./*"?

  2. Bash Script para eliminar el archivo más antiguo de una carpeta?

  3. ¿La diferencia entre enlaces simbólicos y duros?

  4. ¿Cómo quitar el Bom de un archivo Utf-8?

  5. ¿Reemplazar datos entre comillas en un archivo?

Zsync:una utilidad de transferencia de archivos para descargar solo las partes nuevas de un archivo

¿Cuáles son las diferencias entre grep, awk y sed?

Cómo usar sed para eliminar las últimas n líneas de un archivo

¿Cuál es la diferencia entre fsync y syncfs?

Bash script para eliminar el archivo más antiguo de una carpeta

Grep en un archivo de registro enorme (> 14 GB) ¿solo los últimos x GB?