GNU awk
:
awk -v FPAT='[^,"]+|"[^"]+"' '
NR==1; NR>1{
for (i=1; i<=NF; i++) {
if ($i~/^"?[0-9]+([0-9,.]+[0-9]+)?-"?$/) {
sub(/-/, "", $i);
sub(/[0-9]/, "-&", $i);
}
printf "%s%s",$i,(i==NF? ORS:",")
}
}' file.csv
-
-v FPAT='[^,"]+|"[^"]+"'
- padrão de regex que define o valor do campo -
$i~/^"?[0-9]+([0-9,.]+[0-9]+)?-"?$/
- verifica se um campo contém um número com o sinal de menos à direita-
(o número poderia ser aspas duplas)
A saída:
column 1, column 2, column 3, column 4, column 5
-12,"-455,365.44","string with quotes-and with a comma in between","4,432",6787