
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