Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以指数形式获取unix中dat文件中列的总和_Unix_Awk_Exponential - Fatal编程技术网

以指数形式获取unix中dat文件中列的总和

以指数形式获取unix中dat文件中列的总和,unix,awk,exponential,Unix,Awk,Exponential,我有一个dat文件,其示例如下: NYEFP 191800034103 20130225912131 JPYCNTG1 JPY 20130225POSTING from GMI QTY*MULT -676500000.00SYS EFPSP NYEFP 291800034103 20130225912131 JPYCNTR1 JPY 20130225POSTIN

我有一个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个字段数字部分的总和。在这种情况下,总和(1200000000+676500000)和负总和。 我想这是指数形式

任何想法都会很有价值

这可以是一种方式:

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 '{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

你要找的指数形式是什么?读起来很好,@user2885163!既然你是新来的,记住如果你的问题已经解决了,你可以把答案标记为接受。您可以点击答案旁边的复选标记,将答案从空心切换为绿色。看看你是否有任何疑问!很抱歉再次光临。。我是这方面的新手。。当我在命令行中运行它时,它工作了。。我应该在perl脚本中格式化它吗?它应该是@user2885163。还请检查我的更新答案,因为我在第一个版本中没有添加指数格式。我得到的错误是:字符串在运算符预期位于/GMI2GBS.pl_-rinu行273的位置找到,靠近“awk”{if($10+0>0)…}否则…负:“b}'(您需要预先声明awk吗?)Bareword在运算符预期位于/GMI2GBS.pl_-rinu行273的位置找到,靠近““{if($10+0>0){a+=$10+0}…”否定:“b}”GMINY2GBS(GMINY2GBS之前缺少运算符?)语法错误位于./GMI2GBS.pl_rinu行273,靠近“awk”{if($10+0>0){a+=$10+0}否则{b+=$10+0}结束{print“positive:”a;print“negative:”b}“由于编译错误,./GMI2GBS.pl_rinu的执行被中止。不幸的是,我对Perl不熟悉,我发现了这个问题:也许它可以帮助您。否则,更新您的问题,显示您现在使用的全部代码。
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