I had to negate numbers in a data file. My initial script simply negated the required field. Here a test:
gawk "{ print -$1 }" 123 -123 123.45678 -123.457
I wanted to preserve all the digits after the decimal point so I tried printf()
(the multiple double-quotes is to escape double-quotes in Windows CMD):
gawk "{ printf("""%10lf\n""", -$1) }" 123 -123.000000 123.45678 -123.456780 123.456 -123.456000
Hm, now the result was being padded to the right depending on the number of digits specified. Since I only wanted to negate the values and not do any arithmetic, a trick is to add or delete the leading minus sign from the input string depending whether the input value was positive or negative, respectively:
gawk "{ print $1<0 ? substr($1, 2) : """-""" $1 }" 123 -123 123.45678 -123.45678 -123 123 -123.45678 123.45678