Primeiro de tudo, você deve usar um analisador de CSV adequado. Por exemplo, em Perl, você pode usar Text::CSV
:
-
Instale
cpanm
(se você usar o Perl, me agradecerá mais tarde)$ sudo apt-get install cpanminus
Se você não está em um sistema Debian, você deve ser capaz de instalá-lo usando o gerenciador de pacotes da sua distribuição.
-
Instale o módulo
Text::CSV
$ sudo cpanm Text::CSV
-
Analise seu arquivo
$ perl -MText::CSV -le ' $csv = Text::CSV->new({binary=>1}); while ($row = $csv->getline(STDIN)){ print "1:$row->[0], 2:$row->[1], 3:$row->[2], 4:$row->[3]"}' < file.csv 1:prabhat,kumar, 2:19, 3:2000, 4:bangalore,India
Como você pode ver acima, o primeiro campo é
$row->[0]
, o segundo$row->[1]
etc.
Esse foi o caminho correto. Um hack simples, mas sujo, seria substituir quaisquer vírgulas citadas por outro caractere. Em seguida, use awk
normalmente e, finalmente, mude-os novamente para vírgulas. Estou usando ###
aqui, mas você pode usar qualquer coisa que tenha certeza de que nunca estará em um dos seus campos.
$ sed -r 's/("[^",]+),([^",]+")/###/g' file.csv |
awk -F, '{print $1,$3}' | sed 's/###/,/g'
"prabhat,kumar" 2000