como remover as aspas duplas em um csv [duplicado]

4

Eu tenho um arquivo CSV como

a.csv
"1,2,3,4,9"
"1,2,3,6,24"
"1,2,6,8,28"
"1,2,4,6,30"

Eu quero algo como

b.csv
1,2,3,4,9
1,2,3,6,24
1,2,6,8,28
1,2,4,6,30

Eu tentei awk '{split($0,a,"\""); mas não ajudou.Qualquer ajuda é apreciada.

    
por joker21 19.01.2017 / 04:42

4 respostas

3

Use a função gsub() para substituição global

$ awk '{gsub(/\"/,"")};1' input.csv                    
1,2,3,4,9
1,2,3,6,24
1,2,6,8,28
1,2,4,6,30

Para enviar saída para o novo arquivo, use o operador > shell:

awk '{gsub(/\"/,"")};1' input.csv > output.csv

Sua divisão para a abordagem de matriz também pode ser usada, embora não seja necessária, mas você pode usá-la da seguinte forma:

$ awk '{split($0,a,"\""); print a[2]}' input.cvs       
1,2,3,4,9
1,2,3,6,24
1,2,6,8,28
1,2,4,6,30

Observe que nessa questão em particular o padrão geral é que aspas estão no início e no final da linha, o que significa que também podemos tratá-la como separador de campo, onde o campo 1 é nulo, o campo 2 é 1,2,3,4 e o campo 3 também é nulo. Assim, podemos fazer:

awk -F '\"' '{print $2}' input.csv

E também podemos tirar substring de toda a linha:

awk '{print substr($0,2,length($0)-2)}' quoted.csv

Falando em eliminar primeiro e último personagem, há um post inteiro em stackoverflow sobre isso com outras ferramentas, como sed e shell POSIX.

    
por 19.01.2017 / 04:47
8

Abordagem mais simples:

tr -d '"' <a.csv >b.csv
    
por 19.01.2017 / 04:55
4

Outra solução com sed :

sed -e 's/"//g' a.csv > b.csv
    
por 19.01.2017 / 09:10
0

Você poderia usar este comando

awk '{gsub("\"",RS);print}' a.csv >  b.csv
    
por 19.01.2017 / 04:50

Tags