Seus campos name
contêm vírgulas, mas não são citados. Por isso, awk
verá tipos diferentes de valores na coluna $3
de cada linha. Este seria o caso mesmo se eles fossem citados, mas no caso mostrado aqui, mesmo um analisador de CSV real não ajudará. Aqui está o que eu fiz para contornar isso:
awk 'BEGIN { FS=",,*"; print 0 }
(NR > 1) { gsub("[^0-9,]",""); printf "%d+\n", $2 }
END { print "pq" }' < text.csv \
| dc
Isso primeiro usa gsub
para remover tudo o que não é um dígito ou vírgula em cada linha e, em seguida, imprime o valor da nova segunda coluna, em que as colunas são consideradas separadas por uma ou mais vírgulas. Os blocos BEGIN
e END
fazem os dados funcionarem com o formato dc
expects.
Eu usei dc
porque não sei se awk
funciona como uma calculadora de precisão arbitrária e de propósito geral. Em caso afirmativo, você poderia fazer:
awk -F ',,*' '(NR > 1){ gsub("[^0-9,]",""); SUM_SALARY += $2 } END { print SUM_SALARY }' < text.csv
Este caso funciona muito parecido com o anterior, exceto que awk
está fazendo a aritmética em vez de dc
. Isso também usa a opção -F
para definir o separador de campo, para evitar um bloco BEGIN
sem uso.