0

我有一个 dat 文件,下面给出了示例:

NYEFP 191800034103    20130225912131 JPYCNTG1 JPY 20130225POSTING from GMI                        QTY*MULT  -676500000.00SYS EFPSP                                      
NYEFP 291800034103    20130225912131 JPYCNTR1 JPY 20130225POSTING from GMI                        -(QTY*MU   676500000.00SYS EFPSP                                      
NYFX  191800034103    20130225912131 AUDCNTG2 AUD 20130225POSTING from GMI                        QTY*MULT -1200000000.00SYS FWDLL                                      
NYFX  291800034103    20130225912131 AUDCNTR2 AUD 20130225POSTING from GMI                        -(QTY*MU  1200000000.00SYS FWDLL     

我想获得所有负值和所有正值的第 10 个字段数字部分的总和。在这种情况下 SUM(1200000000+676500000) 和负和。我也希望这是指数形式。

任何想法都会很有价值

4

2 回答 2

2

这可以是一种方式:

awk '{if ($10+0>0) {a+=$10+0} else {b+=$10+0}} 
      END{printf "positive: %e \nnegative: %e\n", a, b}' file

其中%e代表指数格式。

请注意,$10+0执行表达式是为了摆脱字段中包含的文本。因此,676500000.00SYS变为676500000.00

测试

$ awk '{if ($10+0>0) {a+=$10+0} else {b+=$10+0}} 
  END{printf "positive: %e \nnegative: %e\n", a, b}' a
positive: 1.876500e+09 
negative: -1.876500e+09
于 2013-10-17T09:22:07.163 回答
0

另一种方法:

awk '{gsub(/SYS/,"");$10>0?p+=$10:n+=$10}END{printf "pos:%E\nneg:%E\n",p,n}' file
pos:1.876500E+09
neg:-1.876500E+09
于 2013-10-17T09:34:53.580 回答