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,