Você está se dividindo em vírgulas, mas depois tem strings com vírgulas. Não pense que você está recebendo a 9ª coluna como a data. Inserir um print m
depois dessa linha mostra o seguinte:
m=substr($9,4,3)
print m
Exemplo
MY M: lum
column1,column2,column3,column4,column5,column6, column7, Column8,00/00/2009, Column10
MY M: me"
"12","B000QRIGJ4","4432","string with quotes, and with a comma, and colon: in between","4432","author1,00/00/2000,"890","88","11-OCT-11","12"
MY M: tho
"4432","B000QRIGJ4","890","another, string with quotes, and with more than, two commas: in between","455",00/00/2002, name","12","455","12-OCT-11","55"
MY M: me"
"11","B000QRIGJ4","77","string with, commas and (paranthesis) and : colans, in between","12","author3,00/00/2000,"333","22","13-OCT-11","232"
Acho que você precisa repensar sua abordagem um pouco ou escapar de qualquer vírgula incluída em strings.
Uma correção
awk
tem uma capacidade estranha mas útil de dividir em grupos de caracteres. Uma abordagem seria dividir em ","
em vez de apenas as vírgulas.
Exemplo (refinamento # 1)
$ awk -F'","' '
BEGIN {
split("JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC", month, " ")
for (i=1; i<=12; i++) mdigit[month[i]]=i
}
{
if(NR==1){print}
else{ m=substr($9,4,3); print "MY M: " m;
$9 = sprintf("%02d/%02d/20%02d",mdigit[m],substr($9,1,2),substr($9,8,20))
print
} }' OFS="," file.csv
Saída
MY M:
column1,column2,column3,column4,column5,column6, column7, Column8, Column9, Column10,,,,,,,,00/00/2000
MY M: OCT
"12,B000QRIGJ4,4432,string with quotes, and with a comma, and colon: in between,4432,author1, name,890,88,10/11/2011,12"
MY M: OCT
"4432,B000QRIGJ4,890,another, string with quotes, and with more than, two commas: in between,455,author2, name,12,455,10/12/2011,55"
MY M: OCT
"11,B000QRIGJ4,77,string with, commas and (paranthesis) and : colans, in between,12,author3, name,333,22,10/13/2011,232"
Mesmo isso não está certo. Você precisará fazer uma limpeza adicional para obter as cotações de volta e, em seguida, remover as cotações duplicadas no início e no final de suas seqüências de caracteres.
Exemplo (refinamento # 2)
$ awk -F'","' '
BEGIN {
split("JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC", month, " ")
for (i=1; i<=12; i++) mdigit[month[i]]=i
}
{ m=substr($9,4,3); print "MY M: " m;
$9 = sprintf("\"%02d/%02d/20%02d\"",mdigit[m],substr($9,1,2),substr($9,8,20))
for (i=1; i<=10; i++) printf("\"%s\",",$i); printf("%s\n","")
/\"\"/ }' OFS="," file.csv
Saída
MY M:
"column1,column2,column3,column4,column5,column6, column7, Column8, Column9, Column10","","","","","","","",""00/00/2000"","",
MY M: OCT
""12","B000QRIGJ4","4432","string with quotes, and with a comma, and colon: in between","4432","author1, name","890","88",""10/11/2011"","12"",
MY M: OCT
""4432","B000QRIGJ4","890","another, string with quotes, and with more than, two commas: in between","455","author2, name","12","455",""10/12/2011"","55"",
MY M: OCT
""11","B000QRIGJ4","77","string with, commas and (paranthesis) and : colans, in between","12","author3, name","333","22",""10/13/2011"","232"",
Eu não vou continuar com esta abordagem, espero que você veja que não é uma maneira muito boa de resolver o problema e é forjada com problemas de manutenção e é muito frágil se qualquer uma das entradas mudar ao longo do tempo.
Exemplo (refinamento # 3)
OK, então eu não poderia simplesmente deixar isso, então aqui está um exemplo de trabalho.
awk -F'","' '
BEGIN {
split("JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC", month, " ")
for (i=1; i<=12; i++) mdigit[month[i]]=i
}
{ if (NR==1){print; next} }
{ m=substr($9,4,3)
$9 = sprintf("%02d/%02d/20%02d",mdigit[m],substr($9,1,2),substr($9,8,20))
for (i=1; i<=10; i++) printf("\"%s\",",$i); printf("%s\n","")
}' OFS="," file.csv | sed -e 's/""/"/g' -e 's/,$//'
Saída
column1,column2,column3,column4,column5,column6, column7, Column8, Column9, Column10
"12","B000QRIGJ4","4432","string with quotes, and with a comma, and colon: in between","4432","author1, name","890","88","10/11/2011","12"
"4432","B000QRIGJ4","890","another, string with quotes, and with more than, two commas: in between","455","author2, name","12","455","10/12/2011","55"
"11","B000QRIGJ4","77","string with, commas and (paranthesis) and : colans, in between","12","author3, name","333","22","10/13/2011","232"