Usando sed para remover aspas de separação de dígitos entre aspas e citações de CSV? [duplicado]

0

Como posso usar o sed para remover da coluna anterior à última a vírgula char do dígito do grupo e as próprias citações?

Por favor, note que no exemplo abaixo a coluna de destino não está contida entre aspas duplas.

0,1,,,"10,815,197",
6,7,010202,,"5,589",
6,7,010202,,589,

Um resultado exposto seria:

0,1,,,10815197,
6,7,010202,,5589,
6,7,010202,,589,
    
por user528025 08.02.2015 / 09:52

3 respostas

2

Awk será o melhor para o seu cenário.

$ awk -F'"' '{gsub(",", "", $2);print}' file.txt 
0,1,,, 10815197 ,
6,7,010202,, 5589 ,
6,7,010202,,589,

Como funciona

-F'"' - faz com que AWK use aspas duplas (") como separador de registro.

A função

gsub(",","",$2) - gsub pesquisará e substituirá toda a ocorrência de aspas duplas por uma string vazia.

print - Imprime o conteúdo modificado na saída.

    
por 08.02.2015 / 12:51
1

Acho mais fácil com awk . Você pode tentar algo assim:

$ awk -v v='"' 'BEGIN{FS=OFS=v}{gsub(",","",$2);gsub("\"","",$0);print }' file.txt
0,1,,,10815197,
6,7,010202,,5589,
6,7,010202,,589,
  • Basicamente você está dizendo a awk que usa uma expressão regular -v v='"' para usá-lo como separador de campo.
  • Com FS=OFS=v , você diz que o separador de campo é o mesmo que o separador de campo de saída, que é o " .
  • gsub (",","",$2) substitui o , por nada no segundo campo $2 (delimitado no início e no final com " ).
  • gsub("\"","",$0) pega toda a linha e substitui " sem nada antes da impressão da linha.
por 08.02.2015 / 10:42
0

sed não é a ferramenta certa para isso.

$ perl -pe 's|"([\d,]+)"(?=[^"]*$)|$1=~y/,//dr|eg' file
0,1,,,10815197,
6,7,010202,,5589,
6,7,010202,,589,

Através do Python.

#!/usr/bin/python3
import sys
import re
file = sys.argv[1]
with open(file, 'r') as f:
    for line in f:
        print(re.sub(r'"([\d,]+)"(?=[^"]*$)', lambda m: m.group(1).replace(',', ''), line), end = "")

Salve o script acima em um arquivo, diga script.py e execute, em seguida, execute o sript acionando o comando abaixo no terminal.

$ python3 script.py inputfile
    
por 08.02.2015 / 13:26