
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