substitua espaço e células vazias no arquivo csv

substitua espaço e células vazias no arquivo csv

Eu tenho um arquivo csv que possui 7 colunas. Possui células vazias e alguns espaços entre as células. Como posso substituir as células vazias por NA e remover espaços extras? Muito obrigado!

Aqui está a aparência do meu arquivo, mas aqui ele parece distorcer quando eu o copio e colo.

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

Responder1

Sua Resposta:

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

Para obter 'NA' no último campo se estiver em branco:

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

Você também pode usar:

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

Responder2

A resposta de αғsнιη funcionou para mim, mas gostaria apenas de explicar um pouco.

Eu estava tentando algo assim:

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

Quais saídas

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

Por causa dos campos vazios repetidos, a última vírgula faz parte da primeira substituição e do início da próxima substituição desejada, portanto, você substitui cada segundo campo vazio.

Agora você poderia fazer algo como:

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

ou

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

O que irá substituir todas as células, já que o segundo comando irá pegar as que estão faltando, mas é um pouco confuso.

O comando de αғsнιη faz essencialmente a mesma coisa, usando um rótulo e um salto, o que eu não sabia que você poderia fazer.

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

saída:

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

Portanto, a primeira parte do comando cria um rótulo.

Então temos a mesma substituição.

Então temos o comando t que significa pular para o rótulo se o comando de substituição anterior foi bem-sucedido.

Mais Informações:http://www.grymoire.com/Unix/Sed.html#uh-59

informação relacionada