GNU/Linux >> Tutoriales Linux >  >> Linux

¿Reemplazar datos entre comillas en un archivo?

Quiero extraer datos entre ” ” de un archivo de datos que tiene un delimitador como coma.

Ejemplo de archivo de entrada:

,7/30/2019,7/31/2019,Wed,8/1/2019,FH/FN 30yr & 20yr TBA & Spec ,"10,000",8/13/2019,

Salida esperada:

,7/30/2019,7/31/2019,Wed,8/1/2019,FH/FN 30yr & 20yr TBA & Spec ,"10000",8/13/2019,

Respuesta aceptada:

Suponiendo que este tenga el formato CSV correcto (los datos de ejemplo se ven bien a este respecto), podemos usar csvformat de csvkit para cambiar temporalmente los delimitadores de campo a algún otro carácter que no esté presente en los datos, como @ , elimine todas las comas y vuelva a cambiar el delimitador de campo al valor predeterminado:

$ csvformat -D '@' file.csv | tr -d , | csvformat -d '@'
,7/30/2019,7/31/2019,Wed,8/1/2019,FH/FN 30yr & 20yr TBA & Spec ,10000,8/13/2019,

El resultado no tiene comillas alrededor del campo que modificamos, pero eso se debe a que ya no lo necesita.

Obviamente, "eliminar todas las comas" puede eliminar las comas que en realidad no queremos eliminar, por lo que podemos ser un poco más selectivos y solo eliminar las comas en el campo 7:

$ csvformat -D '@' file.csv | awk -F '@' 'BEGIN { OFS=FS } { gsub(",", "", $7); print }' | csvformat -d '@'
,7/30/2019,7/31/2019,Wed,8/1/2019,FH/FN 30yr & 20yr TBA & Spec ,10000,8/13/2019,

Linux
  1. Protocolos de transferencia de archivos:FTP vs SFTP

  2. Copie n bytes de datos x al archivo

  3. ¿Cómo funciona Rm? ¿Qué hace Rm?

  4. Diferencia entre archivo de dispositivo y controladores de dispositivo

  5. Usar sed para reemplazar entre un patrón específico

¿Recuperación de datos ext4?

¿Cómo compartir archivos entre Ubuntu y Windows 10?

Cómo eliminar un archivo de datos de AWStats

Registro de datos de VMStat en un archivo

Encuentre y reemplace texto en un archivo entre un rango de líneas usando sed

No se pueden enviar datos de MySQL a un archivo