string tendo doublequotes entre aparte das citações incluídas

1

Eu tenho um requisito.

Meu arquivo CSV tem uma string "Testurteil "sehr gut"" e eu preciso carregar esse arquivo (em redis ) sem remover as aspas, ou Eu quero assim: Testurteil "sehr gut" , mesmo se tem as cotações de fechamento, tudo bem.

    
por Sonia Thomas 27.08.2013 / 12:30

2 respostas

2

Tente:

perl -pi.back -le 's/"(?:[^"]|"(?=[^,]))*"|[^",]*/($r=$&)=~
  s@(^"|"$|\.)|"@$1||"\\""@ge;$r/ge' file.csv

Isso usa heurística para tentar identificar esses caracteres de aspas duplas que não são os que os encerram e escapá-los com uma barra invertida.

Por exemplo, isso mudaria:

 "asd","","a,b"c,d"e,f",""",,blah

Para:

 "asd","","a,b\"c,d\"e,f","\"",,blah

(deixando o original como file.csv.back )

Para alterá-las para aspas simples, em vez de as escapar:

perl -pi.back -le 's/"(?:[^"]|"(?=[^,]))*"|[^",]*/($r=$&)=~
  s@(^"|"$|\.)|"@$1||"'\''"@ge;$r/ge' file.csv
    
por 27.08.2013 / 14:09
0

Talvez assim?

cat test.csv
17,"abc","Testurteil "sehr gut"","08/15"
99,"xyz","Testurteil "vernichtend"","4711"

Imprima todos os campos de todas as linhas (apenas para verificação):

awk -F, '{print $0}' test.csv
17,"abc","Testurteil "sehr gut"","08/15"
99,"xyz","Testurteil "vernichtend"","4711"

A opção de linha de comando do awk "-F" permite que você defina um separador de campo diferente do padrão em branco.

Imprima apenas o seu "campo especial", ou seja, o campo número 3 de todas as linhas:

awk -F, '{print $3}' test.csv
"Testurteil "sehr gut""
"Testurteil "vernichtend""

Talvez alguns comentários para melhor legibilidade (ou exportação para um armazenamento Key: Value):

awk -F, '{print "Line" FNR ":field3 " $3}' test.csv 
Line1:field3 "Testurteil "sehr gut""
Line2:field3 "Testurteil "vernichtend""

Use mais campos do seu arquivo CSV:

awk -F, '{print "Line number " FNR ": " $3 " for product "$1}' test.csv
Line number 1: "Testurteil "sehr gut"" for product 17
Line number 2: "Testurteil "vernichtend"" for product 99
    
por 28.08.2013 / 00:36