reemplazar espacios y celdas vacías en un archivo csv

reemplazar espacios y celdas vacías en un archivo csv

Tengo un archivo csv que tiene 7 columnas. Tiene celdas vacías y algunos espacios entre celdas. ¿Cómo puedo reemplazar las celdas vacías con NA y eliminar espacios adicionales? ¡Muchas gracias!

Así es como se ve mi archivo, pero aquí parece deformarse cuando lo copio y lo pego.

130070078,PPW0001,1,4,4HW             ,2,15.61943874
120040039,PPW0002,0,0,                ,0,0
120040043,PPW0003,1,3,3WE             ,1,14.43394935

Respuesta1

Tu respuesta:

sed 's/ *,/,/g' file1 | sed 's/,,/,NA,/g' > file2

Para obtener 'NA' en el último campo si está en blanco:

sed 's/ *,/,/g' file1 | sed 's/,,/,NA,/g' | awk -F, 'OFS="," {if ($NF == "") $NF = "NA"; print}'> file2

También podrías usar:

sed 's/,,/,NA,/g' file1 | tr -d ' ' | awk -F, 'OFS="," {if ($NF == "") $NF = "NA"; print}'

Respuesta2

La respuesta de αғsнιη funcionó para mí, pero me gustaría explicarla un poco.

Estaba intentando algo como esto:

echo "1,,2,,,3,,,4,,,,5,,,,,,,,,,6" | sed 's/,,/,-,/g'

¿Qué salidas

1,-,2,-,,3,-,,4,-,,-,5,-,,-,,-,,-,,-,6

Debido a los campos vacíos repetidos, la última coma es parte del primer reemplazo y el comienzo del siguiente reemplazo deseado, por lo que simplemente se reemplaza cada segundo campo vacío.

Ahora podrías hacer algo como:

echo "1,,2,,,3,,,4,,,,5,,,,,,,,,,6" | sed -e 's/,,/,-,/g' -e 's/,,/,-,/g'

o

sed 's/,,/,-,/g;s/,,/,-,/g'

Lo cual reemplazará todas las celdas, ya que el segundo comando obtendrá las que faltan, pero es un poco complicado.

El comando de αғsнιη hace esencialmente lo mismo, usando una etiqueta y un salto, lo cual no sabía que pudieras hacer.

sed ':MYLABEL; s/,,/,-,/g; t MYLABEL;'

producción:

1,-,2,-,-,3,-,-,4,-,-,-,5,-,-,-,-,-,-,-,-,-,6

Entonces la primera parte del comando crea una etiqueta.

Entonces tenemos la misma sustitución.

Luego tenemos el comando t, que significa saltar a la etiqueta si el comando de sustitución anterior fue exitoso.

Más información:http://www.grymoire.com/Unix/Sed.html#uh-59

información relacionada