Selecionando linhas em um arquivo CSV com base no valor da coluna que contém uma vírgula incorporada

0

Eu tenho um arquivo CSV (CSV UTF-8 (delimitado por vírgulas) (.csv)) com 5 colunas: dados do cliente, nome do cliente, e-mail do cliente, motivo do cancelamento, comentários da razão de cancelamento

Como eu filtraria as linhas com "Queria o item mais tarde, optaria por não obtê-lo mais tarde" na coluna de motivo de cancelamento e depois o leria em um novo arquivo chamado input1.csv?

Abaixo está o que eu tentei, mas input1.csv saiu em branco:

awk -F , '$4 == "Wanted item later, choose not to get it later" { print }' input.csv > input1.csv

Aqui está uma entrada de amostra do arquivo input.csv:

cancellation date,customer first name,customer email,cancel reason,cancel reason comments
1/22/17,aaaa,[email protected],"Wanted item later, choose not to get it later", test
    
por eulerprime 30.01.2017 / 17:05

3 respostas

1

De acordo com a minha resposta a sua pergunta anterior , usando csvkit , e supondo que o CSV esteja corretamente citado e usa vírgulas como delimitadores:

$ csvgrep -c "cancel reason" \
    -m "Wanted item later, choose not to get it later" input.csv >input1.csv

ou

$ csvgrep -c 4 -m "Wanted item later, choose not to get it later" input.csv >input1.csv
    
por 30.01.2017 / 17:42
0

Parece que você espera ter 5 campos. Isso identificará linhas com mais campos:

awk -F, 'NF > 5' input > output

Isso não procura especificamente uma vírgula no quarto campo.

    
por 01.02.2017 / 15:58
0
grep -E ',"[^"]*,[^"]*"|"[^"]*,[^"]*",' input.csv > input1.csv
    
por 02.02.2017 / 17:17