Aqui estão alguns sed
que você pode usar para fazer isso:
sed 'H; 1h; g; x; s/^\n//
/^\([^"]*\)"\([^"]*".*\)/! d
s///; x; s///; :t
/\n\{0,1\}\([^;,"]*\)[";]\(.*\)/{ H
s///; x; s///p
s/\(.*,\).*//; x
/^[^,"]*,\(.*\)/!bt
};s///;x;s///;G;x;s///;x;D
Eu sei - parece longo. Mas - enquanto os buffers de memória de sed
não cederem sob pressão - isto deve lidar com qualquer tipo de texto dentro de seus campos, dado alguns (como eu penso) advertências realistas:
- As porções de
"
citadas não podem conter citações de escape
- O último campo deve ser um campo com
"
e aspas "
devem ser pareadas de maneira uniforme.
- Os campos delimitados por
;
não podem conter vírgulas, aspas ou ;
semicolons
- Deve haver pelo menos um campo separado por vírgula liderando cada porção
"
cotada.
Veja um exemplo:
sed ... <<\INPUT
John,Doe,"Foo1;Ba
r1;Foo2;Bar2",Jane,Doe,"Foo3;Bar3;Foo4;Bar4",All,Work,And,
No,Play,Makes,Jack,"A Superhero;
A
Very
Dull
Boy"
INPUT
Se você preencher o ...
acima com o script sed
na parte superior desta resposta, deverá obter a seguinte saída:
John,Doe,Foo1
John,Doe,Ba
r1
John,Doe,Foo2
John,Doe,Bar2
Jane,Doe,Foo3
Jane,Doe,Bar3
Jane,Doe,Foo4
Jane,Doe,Bar4
All,Work,And,
No,Play,Makes,Jack,A Superhero
All,Work,And,
No,Play,Makes,Jack,
A
Very
Dull
Boy